【问题标题】:chrome.tabs.executeScript is not returning results from content pagechrome.tabs.executeScript 未从内容页面返回结果
【发布时间】:2018-06-28 06:18:16
【问题描述】:

我正在开发一个 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?

它可能相关也可能不相关,但是当我将警报消息放入回调函数时,它们会立即消失。我已经尝试在细节中包含所有 allFrames: true 但没有运气。

【问题讨论】:

    标签: javascript google-chrome-extension


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-06
      • 2021-09-15
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多