我有时会遇到一个页面,它提供了有趣的内容,同时也带来了大量令人讨厌的内容,如添加、弹出窗口、重定向,今天你不能只安装noscript或addblock,因为它们正在停止工作,或者会被检测到,网站会阻止你看到这些内容。
当你在页面加载之前阻止脚本域和其他资源时,你会得到一个破碎或空白的页面-所以这种方法真的没有解决任何问题,当你在加载后禁用它(使用noscript或quickjs)时,它根本不会停止任何东西(已经加载的东西)。
假设你在入侵广告的页面上,每个链接都是通过javascript处理的,而锚标签上的真实链接从未使用过,每次你点击都会执行一些绑定到链接的点击处理程序,并打开例如base64图像中的弹出窗口或类似的东西,所以即使是adblock也无能为力。当然,它不能涵盖所有场景。
是否有一个用于firefox、chrome的插件,它可以根据需要删除所有附加的处理程序,卸载所有脚本,内联脚本,而不会干扰显示的内容,并在我决定和当前打开的选项卡时立即不修改页面?没有一行js代码,ajax调用,在那之后什么都不能执行和修改?所以,为了完成这个场景,我接下来要做的一切都将由纯html和css(在当前选项卡的范围内)控制
我在这里找到了以下内容。它的工作原理是请求您所在页面的源代码,然后从中剥离脚本标记,然后用该源代码减去脚本重新加载整个DOM。对我来说,它绕过了<noscript>
类型的麻烦。我加载到一个扩展中,并为特别烦人的页面启用它。
您可以对其进行修改,使其仅阻止某些脚本。我在Chrome中将其作为本地压缩的扩展运行。
var xhr = new XMLHttpRequest,
content,
doc,
scripts;
xhr.open( "GET", document.URL, false );
xhr.send(null);
content = xhr.responseText;
doc = document.implementation.createHTMLDocument(""+(document.title || ""));
doc.open();
doc.write(content);
doc.close();
scripts = doc.getElementsByTagName("script");
//Modify scripts as you please
[].forEach.call( scripts, function( script ) {
script.removeAttribute("src");
script.innerHTML = 'alert("hello world");';
});
//Doing this will activate all the modified scripts and the "old page" will be gone as the document is replaced
document.replaceChild( document.importNode(doc.documentElement, true), document.documentElement);