我有一个网站,其中有一个对象存储在 javascript 变量中,当我从 Web 控制台运行 images
时,这是输出:
Object {123: Array[3], 444: Array[3], 654: Array[3]}
我需要将此变量添加到我的扩展中。
我尝试使用此代码但没有成功:
content.js:
function exeecuteCode(tab, code, callback) {
chrome.tabs.executeScript(tab.id, {code}, response => {
debugger;
});
}
index.js:
(function() {
document.addEventListener('DOMContentLoaded', () => {
chrome.tabs.getSelected(null, tab => {
executeCode(tab, "if (typeof images !== 'undefined') document.getElementsByTagName('body')[0].setAttribute('tmp_images', JSON.stringify(images));\n";);
});
}, false);
}());
我的manifest.json包含content.js文件,如下所示。
manifest.json:
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
]
我知道如何在将属性添加到 body
元素后检索回来。
唯一不起作用的是上面的代码。我没有收到任何错误,如果我在选项卡控制台中运行代码,它就会工作。
预先感谢您的帮助!
最佳答案
chrome.tabs.executeScript
无法在内容脚本中调用,您需要将其移至后台页面- 默认情况下,内容脚本将在
document_idle
运行。 ,这意味着在注入(inject)脚本之前已触发DOMContentLoaded
。您可以在调用chrome.tabs.executeScript
时添加runAt: 'document_start'
或者只是删除外部DOMContentLoaded
处理程序,这取决于您的需求。
关于javascript - 使用executeScript获取站点变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38565391/