chrome.tabs.executeScript未返回内容页面的结果

时间:2018-01-19 03:40:07

标签: javascript google-chrome-extension

我正在处理Chrome扩展程序,我尝试从我所在的网页返回所有h2标记。如果简单的

,chrome.tabs.executeScript将起作用
chrome.tabs.executeScript(null,{
    code: 'console.log("hello")'
});

但以下内容无效

chrome.tabs.executeScript(null,{
    code: 'document.getElementsByTagName("h2");'
},function (results){
    alert(results.length);
    for(var i = 0; i < results.length;i++){
        console.log(results[i].innerHTML);
    }
});

的index.html:

<body>
<h1>app</h1>
<div id="container">
  <span>Choose an action</span>
  <button id="someFunc">click here for function</button>
  <script type="text/javascript" src="popup.js"></script>
</div>

popup.js

chrome.tabs.executeScript(null,{
    code: 'document.getElementsByTagName("h2");'
},function (results){
    alert(results.length);
    for(var i = 0; i < results.length;i++){
        console.log(results[i].innerHTML);
    }
});

除了名称,描述,版本。这是我的manifest.js

"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},

"permissions": [
"activeTab",
"storage","http://*/*",
"https://*/*"
]

我测试的代码来自其中一个答案。 chrome.tabs.executeScript(): How to get result of content script?

它可能相关也可能不相关,但当我在回调函数中添加警报消息时,它们会立即消失。我尝试过包括所有的所有框架:详细信息中没有,但没有运气。

1 个答案:

答案 0 :(得分:0)

您无法使用executeScript返回DOM节点。但是如果你需要他们的innerHTML,你可以用它返回一个数组。

chrome.tabs.executeScript(null,{
    code: 'Array.from(document.getElementsByTagName("h2")).map(h => h.innerHTML)'
},function (results){
    console.log(results);
});