因此,我制作了一个简单的Chrome扩展程序,只需加载一个简单的脚本即可从论坛中删除特定的.css
文件。问题是在线程页面上,脚本有效;但是在主论坛页面上它并没有。
这是脚本:
[...]
//e3 2012/2013
var E3 = document.querySelector('#website-specials');
E3.remove();
//var cssE3 = document.querySelectorAll('[href="http://website/e3/2013/css/styles.css"]')[0];
//cssE3.remove(); works too
alert('debug: removed');
[...]
相关的manifest.json
位:
"matches": ["*://*.website.com/*"]
...
"js": ["jquery-2.0.1.min.js", "my_script.js"]
this thread page上的工作(删除CSS)。
this main page 无效(CSS仍然存在)。
我希望我不会错过任何简单的事情。
答案 0 :(得分:1)
Adblock Plus非常适合这种事情。不要尝试使用用户脚本或扩展程序来阻止外部文件,只需安装Adblock Plus,然后为http://website.com/e3/2013/css/styles.css
添加过滤器。
如果您坚持使用usercript方法,那么您的现有代码似乎正在与竞争条件作斗争。 <link>
节点是存储在div中的文档的一部分,显然是由javascript(AJAX)操纵的。有时您的脚本会及时触发以捕获副本,有时则不会。 Chrome scripts fire at unpredictable times, by default。
可能足以将"run_at": "document_end"
添加到您的manifest.json中。 (具有讽刺意味的是,在默认脚本执行时间之前触发。)
但是,请确保使用间隔并删除该链接的所有副本。像这样:
var cssChkInterval = setInterval (killBadCSS, 222);
function killBadCSS (x) {
var cssE3 = document.querySelectorAll (
'link[href="http://website.com/e3/2013/css/styles.css"]'
);
if (cssE3.length) {
for (var J = cssE3.length - 1; J >= 0; --J) {
cssE3[J].remove ();
}
clearInterval (cssChkInterval);
}
}
或者,既然你正在加载jQuery,请使用它! :
var cssChkInterval = setInterval (killBadCSS, 222);
function killBadCSS (x) {
var cssE3 = $('link[href="http://website.com/e3/2013/css/styles.css"]');
if (cssE3.length) {
cssE3.remove ();
clearInterval (cssChkInterval);
}
}