javascript - Chrome 扩展程序会破坏网页,使它们看起来永远加载?

标签 javascript google-chrome-extension

我正在使用 Chrome 扩展将代码注入(inject)网页,以更改部分文本(如果它们与某个字符串匹配)。它正确地替换了文本,但似乎使网页处于无休止的加载状态,并且弄乱了 Facebook 等网站上的某些元素。

    var actualCode = '(' + function() {
    document.body.innerHTML = document.body.innerHTML.replace(/10:00/g, "11:00 AM");
    } + ')();';
    var script = document.createElement('script');
    script.textContent = actualCode;
    (document.head||document.documentElement).appendChild(script);
    script.parentNode.removeChild(script);

最佳答案

替换 innerHTML 还将替换 script 标记内的属性和文本。要仅替换非脚本标记内的文本节点,请使用 TreeWalker

var treeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT),
    textNode;

while(textNode = treeWalker.nextNode()) {
  if(textNode.parentElement.tagName !== 'SCRIPT') {
    textNode.nodeValue = textNode.nodeValue.replace(/10:00/g, "11:00 AM");
  }
}

此外,您无需将脚本附加到 DOM 即可访问其内容。内容脚本可以修改 DOM。

JSBin Demo

关于javascript - Chrome 扩展程序会破坏网页,使它们看起来永远加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26988053/

相关文章:

javascript - 如何让我的菜单逻辑更简洁?

javascript - 编写 Chrome 扩展程序以使用保存的预设更改基本 URL

windows - 可以使用 Delphi 为 Chrome 创建扩展吗?

google-chrome-extension - 使 Chrome 扩展弹出窗口透明

javascript - 检查 knockout 绑定(bind)何时完成

javascript - 如何让简洁的 webpack 插件正常工作

javascript - 将对象键连接/推送到数组

javascript - javascript 中的颜色相等

javascript - React 中 chrome 扩展中的组件之间切换的方式有哪些?

css - 是否有浏览器扩展来获取应用于 DOM 元素的所有 CSS?