有没有一种方法可以使用javascript阻止javascript?

用户名

我正在尝试对Safari进行扩展,使用户可以使用新的API阻止每个站点的javascript。该API可让您注入一个javascript文件,该文件将在任何内容之前加载到网站上,其功能不如常规javascript,就好像它在HTML页面上运行一样。有没有一种方法可以使用javascript阻止所有javascript?

该API含糊地告诉我,“注入的脚本是在网页完全加载之前执行的,因此您可以在将资源添加到网页时采取措施。” 我是否可以挂入一些事件来捕获正在加载的资源并阻止它们?

一定的表现

有一种方法可以阻止大多数Javascript:在页面加载的最开始处附加一个MutationObserver,并且每当文档更改时,如果<script>找到标签,请将其删除:

<script>
new MutationObserver(() => {
  console.log('Mutation observer running...');
  document.body.querySelectorAll('script').forEach(scr => scr.remove());
})
.observe(document.documentElement, { childList: true, subtree: true });
</script>
<script>
console.log('hi');
</script>

来自内联处理程序的Javascript仍然可以运行,但是幸运的是,与<script>标签相比,内联Java并不是很常见(因为这是一种不好的做法),而且通常,所有实质性Javascript都将放在<script>标签中,因此内联Javascript可能经常会只是由于引用未定义的函数而引发错误。

尽管subtree: true在动态添加元素时比其他MutationObserver昂贵得多,但是由于(几乎可以肯定)页面上没有运行Javascript,所以这应该不是问题,尤其是在页面完全加载后。

要同时删除内联处理程序,请检查添加的元素是否具有on属性,然后将其删除:

<script>
const cleanNode = (node) => {
  if (node.nodeType !== 1) {
    // Not an element node:
    return;
  }
  if (node.matches('script')) {
    node.remove();
  }
  [...node.attributes].forEach((attr) => {
    if (attr.name.startsWith('on')) {
      node.removeAttribute(attr.name);
    }
  });
};
new MutationObserver((mutations) => {
  mutations.forEach((mutation) => {
    [...mutation.addedNodes].forEach(cleanNode);
  });
})
.observe(document.documentElement, { childList: true, subtree: true });
</script>
<script>
console.log('hi');
</script>
<img onerror="alert('JS running')" src>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种方法可以使用JavaScript发送CoAP命令?

来自分类Dev

有没有一种方法可以阻止JavaScript在我的网站上运行?

来自分类Dev

有没有一种方法可以使用JavaScript代码而不使用<script>标签?

来自分类Dev

有没有一种方法可以使用Gradle将Kotlin类编译为JavaScript?

来自分类Dev

有没有一种方法可以使用javascript打开文件(vs下载)?

来自分类Dev

有没有一种方法可以使用javascript打开文件(vs下载)?

来自分类Dev

有没有一种方法可以使用Privoxy阻止Verizon跟踪cookie?

来自分类Dev

有没有一种方法可以使用AngularJS在没有JavaScript的模型上从ng-repeat绑定$ index的2种方式?

来自分类Dev

有没有一种方法可以使鼠标滚轮触发Javascript中的“悬停”事件?

来自分类Dev

有没有一种方法可以使用Sass缩短此CSS?

来自分类Dev

有没有一种方法可以使TextView使用Spinner样式?

来自分类Dev

有没有一种方法可以使用ArrayAdapter更新多个TextView?

来自分类Dev

有没有一种方法可以使用Moment JS验证时间?

来自分类Dev

有没有一种方法可以使jQuery的.on()函数与promises配合使用?

来自分类Dev

有没有一种方法可以使用IPython隐藏显示的对象?

来自分类Dev

有没有一种方法可以使用c ++实时阅读文本?

来自分类Dev

有没有一种方法可以使GitLab缓存被使用而不被写入?

来自分类Dev

有没有一种方法可以使用多个值?

来自分类Dev

有没有一种方法可以使用Python从目录创建jar?

来自分类Dev

有没有一种方法可以使用HtmlAgilityPack检测404页?

来自分类Dev

有没有一种方法可以使用OneNote API标记页面?

来自分类Dev

有没有一种方法可以使用Smoke获得类的注释?

来自分类Dev

有没有一种方法可以使TextView使用Spinner样式?

来自分类Dev

有没有一种方法可以使使用HTML的markdown表溢出?

来自分类Dev

有没有一种方法可以使用Javascript使用浏览器的本地gzip解压缩?

来自分类Dev

有没有一种方法可以使用browserify在javascript组件中基于所需的CSS构建主CSS文件?

来自分类Dev

有没有一种方法可以使用Javascript实时获取传输到页面的文件总大小?

来自分类Dev

有没有一种方法可以使用Google的Javascript客户端登录而不会弹出?

来自分类Dev

有没有一种方法可以使用HTML Canvas和JavaScript从点填充到边界为止?

Related 相关文章

  1. 1

    有没有一种方法可以使用JavaScript发送CoAP命令?

  2. 2

    有没有一种方法可以阻止JavaScript在我的网站上运行?

  3. 3

    有没有一种方法可以使用JavaScript代码而不使用<script>标签?

  4. 4

    有没有一种方法可以使用Gradle将Kotlin类编译为JavaScript?

  5. 5

    有没有一种方法可以使用javascript打开文件(vs下载)?

  6. 6

    有没有一种方法可以使用javascript打开文件(vs下载)?

  7. 7

    有没有一种方法可以使用Privoxy阻止Verizon跟踪cookie?

  8. 8

    有没有一种方法可以使用AngularJS在没有JavaScript的模型上从ng-repeat绑定$ index的2种方式?

  9. 9

    有没有一种方法可以使鼠标滚轮触发Javascript中的“悬停”事件?

  10. 10

    有没有一种方法可以使用Sass缩短此CSS?

  11. 11

    有没有一种方法可以使TextView使用Spinner样式?

  12. 12

    有没有一种方法可以使用ArrayAdapter更新多个TextView?

  13. 13

    有没有一种方法可以使用Moment JS验证时间?

  14. 14

    有没有一种方法可以使jQuery的.on()函数与promises配合使用?

  15. 15

    有没有一种方法可以使用IPython隐藏显示的对象?

  16. 16

    有没有一种方法可以使用c ++实时阅读文本?

  17. 17

    有没有一种方法可以使GitLab缓存被使用而不被写入?

  18. 18

    有没有一种方法可以使用多个值?

  19. 19

    有没有一种方法可以使用Python从目录创建jar?

  20. 20

    有没有一种方法可以使用HtmlAgilityPack检测404页?

  21. 21

    有没有一种方法可以使用OneNote API标记页面?

  22. 22

    有没有一种方法可以使用Smoke获得类的注释?

  23. 23

    有没有一种方法可以使TextView使用Spinner样式?

  24. 24

    有没有一种方法可以使使用HTML的markdown表溢出?

  25. 25

    有没有一种方法可以使用Javascript使用浏览器的本地gzip解压缩?

  26. 26

    有没有一种方法可以使用browserify在javascript组件中基于所需的CSS构建主CSS文件?

  27. 27

    有没有一种方法可以使用Javascript实时获取传输到页面的文件总大小?

  28. 28

    有没有一种方法可以使用Google的Javascript客户端登录而不会弹出?

  29. 29

    有没有一种方法可以使用HTML Canvas和JavaScript从点填充到边界为止?

热门标签

归档