首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在页面加载之后的给定时刻禁用特定页面上的所有javascript执行?

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

Stack Overflow用户
提问于 2017-01-28 14:12:48
回答 1查看 1.1K关注 0票数 3

我有时会碰到一个页面,它提供了有趣的内容,同时也提供了大量烦人的内容,比如添加、弹出、重定向,今天你不能仅仅安装noscript或addblock,因为它们会停下来工作,或者会被检测到,站点会阻止您看到这些内容。

当您在页面加载之前阻止脚本域和其他资源时,您将被破坏或空白页--因此这种方法实际上解决不了任何问题,当您在加载后禁用它(使用noscript或quickjs)时,它根本不会停止任何东西(已经加载的内容)。

假设您的页面上有侵入性广告,每个链接都是通过javascript处理的,而锚标记上的真正链接从来没有使用过,每次单击执行一些绑定到链接的单击处理程序并打开(如base64图像中的弹出窗口之类的东西),就连adblock也是无能为力的。当然,它不能覆盖所有的场景。

在火狐上吗? chrome可以根据需要删除所有附加的处理程序,卸载所有脚本,内联脚本而不干扰显示的内容,并在我决定和当前打开选项卡时立即保留一个页面。没有js代码,ajax调用,只是在那一刻之后什么也不能执行和修改?因此,要完成这个场景,我接下来要做的任何事情都将由纯html和css控制(在当前选项卡的范围内)?

EN

回答 1

Stack Overflow用户

发布于 2021-04-08 19:40:33

我发现了下面的here。它的工作方式是请求所处页面的源,然后从其中剥离脚本标记,然后用该源重新加载整个DOM,减去脚本。对我来说,它绕过了<noscript>类型的讨厌。我加载到一个扩展中,并为那些特别烦人的页面启用它。

您可以修改它,以便它只阻塞某些脚本。我在Chrome中将其作为本地打包的扩展来运行。

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41910753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档