3

我有时会碰到一个提供有趣内容的页面,而且还有大量烦人的废话,比如添加、弹出窗口、重定向,今天你不能只安装 noscript 或 addblock,因为它们停止工作,或者它们会被检测到并且网站会防止您看到内容。

当您在页面加载之前阻止脚本域和其他资源时,您将获得损坏或空白页面 - 所以这种方法确实无法解决任何问题,当您在加载后(使用 noscript 或 quickjs)禁用它时,它根本不会停止任何事情(已经加载的内容) )。

假设您在带有侵入性广告的页面上,其中每个链接都通过 javascript 处理,并且永远不会使用锚标签上的真实链接,每次单击时都会执行一些绑定到链接的单击处理程序并打开例如来自 base64 图像的弹出窗口或类似的东西所以连adblock都无奈。当然,它不能涵盖所有场景。

是否有 Firefox、chrome 的附加组件可以按需删除所有附加的处理程序、卸载所有脚本、内联脚本而不干扰显示的内容,并在我决定和当前打开的选项卡时立即保持页面未修改?并且没有任何 js 代码,ajax 调用,在那一刻之后根本无法执行和修改?所以为了完成这个场景,我接下来要做的任何事情都将由纯 html 和 css 控制(在当前选项卡的范围内)?

4

1 回答 1

1

我在这里找到了以下内容。它的工作原理是请求您所在页面的源代码,然后从中剥离脚本标签,然后使用该源代码减去脚本重新加载整个 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);
于 2021-04-08T19:40:33.407 回答