我有一个网站,其中有一个对象存储在javascript变量中,当我从网络控制台运行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
元素后如何检索回来。
唯一不起作用的是上面的代码。我没有收到任何错误,如果我在选项卡控制台中运行代码就可以了。
提前感谢您的帮助!
答案 0 :(得分:1)
chrome.tabs.executeScript
无法在内容脚本中调用,您需要将其移至背景页document_idle
运行,这意味着在注入脚本之前已触发DOMContentLoaded
。您可以在致电chrome.tabs.executeScript
时添加runAt: 'document_start'
,或者只删除外部DOMContentLoaded
处理程序,具体取决于您的需求。