阻止外部JavaScript文件

阻止外部JavaScript文件,javascript,greasemonkey,userscripts,Javascript,Greasemonkey,Userscripts,我正在构建一个用户脚本,并试图阻止从HTML代码加载的外部JS脚本(ckeditor.JS) 使用“beforescriptexecute”应该很容易,但有一个问题:站点使用是js脚本的一种缓存 让我向您展示HTML代码和自定义脚本标记: <script type="text/rocketscript" data-rocketsrc="ckeditor/ckeditor.js"></script> 由于标记为“custom”“beforescriptexecute”

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

使用“beforescriptexecute”应该很容易,但有一个问题:站点使用是js脚本的一种缓存

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

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

由于标记为“custom”“beforescriptexecute”事件无法停止ckeditor.js的运行

您知道如何仅阻止此脚本(从我的userscript)

尝试以下操作:

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

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

  • 页面加载后销毁编辑器
  • 为ckeditor启用切换源代码按钮(是,这是可能的)
  • 篡改cloudflare的缓存
我已经做了前两个,所以我决定尝试第三个选择。如果在控制台中打印“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);
结果:


所以这是一个你想使用JavaScript禁用的插件?不,我可以使用插件禁用脚本,但我想从Userscript/Greasemonkey脚本中执行。以脚本使用/需要的方式定义一个不可配置的全局;可能是
Object.defineProperty(窗口,“CKEditor”,{value:{})
。。。这将阻止脚本工作,无论它如何运行loaded@dandavis你能给我举个例子吗?我试过了,但似乎不起作用。这里是源页面:全局是
CKEDITOR
;我猜错了。可悲的是,它不起作用,这是一个有问题的网页:我对它投了更高的票,因为这是一个好主意,但你真的感到羞耻,伙计,它真的不起作用。