removeChild 在 chrome 扩展中不工作

removeChild not working in chrome extension

我正在尝试使用 node.removeChild 从网页中 删除所有带有 "stylesheet" rel 标签的 link 元素 ,但是它不管用。 我知道 chrome 扩展出于安全原因有一些限制,但我似乎没有发现这个问题是否是由这些限制引起的。

如果我登录 styles[i].parentElement,它会给我 body 元素,这样就可以正常工作了。

如有任何帮助,我们将不胜感激。

manifest.json:

{
"manifest_version": 2,
"name": "Leho Styler",
"description": "This extension gives leho a whole new styling to better please the eye.",
"version": "0.1.0",
"content_scripts": [
  {
    "matches": [
      "https://leho.howest.be/*",
      "https://leho.howest.be/*/*",
      "http://leho.howest.be/*",
      "http://leho.howest.be/*/*"
    ],
    "css": [
      "reset.css",
      "leho.css"
    ],
    "js": ["leho.js"]
  }
]

}

leho.js(内容脚本)

var styles = document.getElementsByTagName('link');

function init() {
    for (var i = 0; i < styles.length; i++) {
        if (styles[i].rel == "stylesheet") {
            styles[i].parentElement.removeChild(styles[i]);
        }
    }
}

init();

首先,将 Query 更改为 var styles = document.querySelectorAll ("link[rel='stylesheet']") - 这样就摆脱了不必要的 if 块。其次,您确定调用 init() 时加载了 DOM 吗?为此,不要直接调用 init,而是尝试添加这一行:document.addEventListener ("DOMContentLoaded", init); - 一旦 DOM 可用,它就会调用 init。据我所知,这也可以在清单文件中完成,尽管我不知道默认值是什么。