使用executeScript

时间:2016-07-25 10:32:12

标签: javascript google-chrome-extension

我有一个网站,其中有一个对象存储在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元素后如何检索回来。

唯一不起作用的是上面的代码。我没有收到任何错误,如果我在选项卡控制台中运行代码就可以了。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

  1. chrome.tabs.executeScript无法在内容脚本中调用,您需要将其移至背景页
  2. 默认情况下,内容脚本将在document_idle运行,这意味着在注入脚本之前已触发DOMContentLoaded。您可以在致电chrome.tabs.executeScript时添加runAt: 'document_start',或者只删除外部DOMContentLoaded处理程序,具体取决于您的需求。