我正在构建一个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运行。
你知道我怎么能阻止这个脚本(来自我的用户脚本)?
答案 0 :(得分:2)
尝试类似:
document.querySelector("script[data-rocketsrc='ckeditor/ckeditor.js']").remove()
答案 1 :(得分:0)
有多种方法可以解决这个问题。我会提到它们:
我已经完成了前两个,所以我决定尝试第三个选项。如果在控制台中打印`localStorage内容,则可以看到此缓存的工作方式:
对于每个脚本,都有一个条目。 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);
结果: