javascript - 内容脚本创建的元素在页面上创建 Gmail、Facebook、stackoverflow 等问题

标签 javascript google-chrome google-chrome-extension gmail

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

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

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

contentScript.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);

关于javascript - 内容脚本创建的元素在页面上创建 Gmail、Facebook、stackoverflow 等问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27622032/

相关文章:

internet-explorer - 为什么MHTML不是用chrome/Firefox浏览而是用IE浏览?

javascript - 从 Chrome 扩展 : concurrency issue? 在页面中注入(inject) Javascript

javascript - onKeyUp 验证

javascript - 当 Promise 状态被拒绝或解决时

javascript - 在 CSS 更改时更改 JS

html - 包含SVG图片的HTML框与图片的宽高比不匹配

html - Grid 960 和 CSS - 并非在所有浏览器中都显示

google-chrome - 应用程序或扩展程序可以在具有 "<all_urls>"权限的系统上打开文件吗?

javascript - 如何在 onStartup 和 onInstalled 中添加 Chrome 扩展监听器?

javascript - 如何在 JS 中使用 SHA256 散列字符串?