我需要获取脚本标记内的 window.configData 变量。我的HTML代码中有多个脚本标记。但是我只需要获取包含 window.configData 变量的脚本标记。 我知道这可以使用 document.scripts / document.getElementsByTagName('script')来完成,并搜索所需的变量。
我需要将这个元素放在一行中,以便将其作为变量传递给chrome扩展中的内容脚本。 以下是我的内容脚本的代码。
function getPageDetails(jsonValueToFind, callback) {
chrome.tabs.executeScript({code:
"document.defaultView.configData"
}, function(result) {
var value = result[0];
chrome.tabs.query({currentWindow: true, active: true}, function(tabs) {
callback({
url: tabs[0].url,
title: tabs[0].title,
jsonValue: value
});
});
});
}
我需要将此变量传递给内容脚本的代码部分。 任何人都可以建议我如何实现这个
答案 0 :(得分:0)
解析页面的源代码以从页面的window
中挖出变量可能不是一个好主意。如果这不是一个简单的任务怎么办?如果<script>
代码会自行删除,该怎么办?
正如您可能已经注意到的那样,如果您尝试在内容脚本的上下文中评估window.configData
,它将返回undefined
。
原因是the isolated world concept:目标页面将附加2个独立的JS上下文,一个用于页面(具有configData
)和内容脚本的上下文。 window
个对象不一样。
要访问页面的对象,您需要在页面的上下文中执行代码。如果你inject a <script>
tag with your code,这是可能的。然后,您可以pass the data to your content script或在DOM中的内容脚本可以访问的位置将其写入。
+-----------------+ -(executeScript)-> +----------------+ --(<script>)---> +-------------+
| Background page | | Content script | | Page script |
+-----------------+ <--(sendMessage)-- +----------------+ <-(CustomEvent)- +-------------+
由于数据收集将是异步的,因此您不能依赖executeScript
的返回值 - 您需要传回消息。
因此,甚至可以更好地包含始终加载(通过清单)并抢先收集数据的内容脚本,然后后台页面可以查询它:
+----------------+ --(<script>)---> +-------------+
| | | Page script |
| Content script | <-(CustomEvent)- +-------------+
| (in manifest) |
+-----------------+ --(sendMessage)--> | |
| Background page | | |
+-----------------+ <--(sendResponse)- +----------------+
答案 1 :(得分:-1)
只需使用onload处理程序和id补充实现window.configData的脚本。
var script document.getelementbyid("scriptid");
script.onload= function(){ window.configData; }