是否可以在页面加载后的给定时刻禁用某些页面上的所有javascript执行?

时间:2017-01-28 14:12:49

标签: javascript browser browser-addons

我有时碰到一个提供有趣内容的页面,还有大量恼人的漏洞,如添加,弹出窗口,重定向,今天你不能安装noscript或addblock因为他们停止工作或者他们可以检测到并且网站将阻止您查看内容。

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

让我们假设您在页面上进行侵入式广告,其中每个链接都是通过javascript处理的,并且永远不会使用锚标记上的真实链接,每次单击执行一些绑定到链接的点击处理程序并打开例如弹出窗口base64图像或类似的东西,所以即使adblock也无能为力。当然,它无法覆盖所有场景。

是否存在firefox,chrome的附加组件,可以根据需要删除所有连接的处理程序,卸载所有脚本,内联脚本而不会干扰显示的内容,并在我决定和不做时立即保留页面目前打开标签?没有一行js代码,ajax调用,那一刻之后什么都不能被执行和修改?那么为了完成这个场景,我接下来要做的就是纯粹的html和css(在当前标签的范围内)?

1 个答案:

答案 0 :(得分:1)

我找到了以下 here。它的工作原理是请求您所在页面的源,然后从中剥离脚本标记,然后使用该源重新加载整个 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);