如何阻止@require缓存外部js脚本

DaM*_*GeX 7 javascript firefox greasemonkey scriptish

我目前正试图弄清楚如何在我的webserver中包含一个javascript,我的scriptish/greasemonkey脚本,并在每次调用usercript时重新加载脚本.

我在我的网络服务器上编辑脚本,每次我对包含的脚本进行更改时,我都不想重新安装用户脚本.

有没有解决这个问题的方法?我一直在寻找答案但到目前为止没有运气.

所以要清楚,我的用户脚本看起来像这样:

// ==UserScript==
// @id             HET
// @name           SettingsHandler
// @version        1.0
// @namespace      HET
// @require        http://urltoscript/scripts/he/lib.js
// @run-at         document-end
// ==/UserScript==
Run Code Online (Sandbox Code Playgroud)

我的外部脚本如下所示:

alert('got it');
Run Code Online (Sandbox Code Playgroud)

所有这些都非常容易用于测试目的.此设置有效,但只是第一次,当我更改我的lib.js脚本时,usercript仍然读取旧脚本.有没有办法阻止用户脚本缓存外部脚本?或者还有其他可以帮助我的元数据吗?

提前谢谢,戴夫

Rya*_*Lee 6

这是唯一可行的答案 https://github.com/Tampermonkey/tampermonkey/issues/475

建议使用选项 4。但是它们是异步加载的,因此加载顺序可能会有所不同

有几种方法可以减轻您的疼痛。:)

  1. 您可以在保存脚本之前增加版本号,所有外部资源将被重新加载。
  2. 将“配置模式”设置为“高级”后,您可以配置外部更新间隔。注意:“始终”仍然表示资源被使用后。因此,您可能需要执行/加载页面两次。
  3. 如果您使用 Tampermonkey Beta(Chrome 或 Firefox),您可以就地编辑外部资源(因为现在除了删除按钮之外还有一个编辑按钮)。
  4. 复制资源并将其存储在本地。在 Chrome 的扩展程序管理页面或 Tampermonkey 的设置页面(如果您使用的是 Firefox)启用“本地文件访问”后,您可以通过本地 file:// URI @require 它们。


Rob*_* M. 5

不确定如何使用 GM/userscript 指令来完成此操作,但您可以轻松地自己添加脚本并将时间戳附加到 url 以防止浏览器缓存它:

var remoteScript = document.createElement('script');
remoteScript.src = 'http://domain.com/path/to/script.js?ts='+(+new Date());
remoteScript.onload = init;
document.body.appendChild(remoteScript);

function init() {
  ... do stuff
}
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于 CSP 阻止您访问“domain.com”。 (5认同)