阻止外部JavaScript文件

时间:2016-08-17 23:49:02

标签: javascript greasemonkey userscripts

我正在构建一个UserScript,并尝试阻止从HTML代码加载的外部JS脚本(ckeditor.js)。

使用" beforescriptexecute "应该很容易但有一个问题:网站使用RocketLoader,这是js脚本的一种缓存。

让我向您展示HTML代码和自定义脚本标记:

<script type="text/rocketscript" data-rocketsrc="ckeditor/ckeditor.js"></script>

由于标签是&#34; custom&#34; &#34;的 beforescriptexecute &#34;事件无法阻止ckeditor.js运行。

你知道我怎么能阻止这个脚本(来自我的用户脚本)

2 个答案:

答案 0 :(得分:2)

尝试类似:

document.querySelector("script[data-rocketsrc='ckeditor/ckeditor.js']").remove()

答案 1 :(得分:0)

有多种方法可以解决这个问题。我会提到它们:

  • 页面加载后销毁ckeditor
  • 为ckeditor启用切换源代码按钮(是的,有可能)
  • 篡改cloudflare的缓存

我已经完成了前两个,所以我决定尝试第三个选项。如果在控制台中打印`localStorage内容,则可以看到此缓存的工作方式:

image description

对于每个脚本,都有一个条目。 JSON结构如下所示:

{
    "url": "http://pagebin.com/ckeditor/ckeditor.js",
    "contents": "/*script code here*/",
    "version": "0.1.33",
    "ctime": 1471875453444,
    "stime": 1471875453444,
    "ttl": 604800000,
    "meta": [
        null,
        null,
        null,
        "200"
    ]
}

您只需将内容设置为空字符串:

// ==UserScript==
// @name        Disable cloudflare cached script
// @namespace   util
// @description Prevents script from being used from cache. It can still be loaded normally.
// @include     http://pagebin.com/
// @version     1
// @grant       none
// @run-at      document-start
// @author       http://stackoverflow.com/a/39082174/607407
// ==/UserScript==
var ckeditorURL = "CLOUDFLARE::http://pagebin.com/ckeditor/ckeditor.js";


var json = JSON.parse(localStorage[ckeditorURL]);
json.contents = "// nothing here, move along";
localStorage[ckeditorURL] = JSON.stringify(json);

结果:

image description