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。据我所知,这也可以在清单文件中完成,尽管我不知道默认值是什么。
我正在尝试使用 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。据我所知,这也可以在清单文件中完成,尽管我不知道默认值是什么。