由页面上的内容脚本创建的元素,导致Gmail,Facebook,stackoverflow等问题

Element created by Content script on page creating issue with Gmail,Facebook,stackoverflow etc

本文关键字:Gmail 导致 Facebook 等问题 stackoverflow 元素 脚本 创建      更新时间:2023-09-26

我正在开发一个Chrome扩展程序,我的要求是为每个打开的选项卡在页面上创建元素(按钮(,并希望在单击按钮时显示简单的警报消息。它适用于所有人,但它总是在Gmail,Facebook和Stackoverflow上产生问题。请帮助我解决此问题。

我有在我的内容脚本中向网页添加按钮的代码。

manifest.json
      ....
      ....
      "content_scripts": [
       {
         "matches":["http://*/*", "https://*/*"],
         "css": [ "style.css" ],
         "js":["contentScript.js"],
         "all_frames": false,
         "run_at": "document_idle"
       }
      ]
      ....
      ....

内容脚本.js

....
....
    function addButton() {
document.body.innerHTML += '<button id="my_button" class="buttonCss">Show Button</button>';
var button = document.getElementById("my_button");
button.addEventListener("click", function () {
    alert("hello");
}, false);

} ..... ..... ....

我认为一些Gmail安全功能正在造成问题。

document.body.innerHTML += /* ... */

我认为这是你的问题。它迫使Chrome重新创建body的整个DOM,丢失附加的事件/数据。

正确的方法是构造和附加一个 DOM 节点:

var button = document.createElement("button");
button.id = "my_button";
button.className = "buttonCss";
button.textContent = "Show Button";
document.body.appendChild(button);