10

我目前正在尝试弄清楚如何在我的网络服务器上包含一个 javascript,在我的 scriptish/greasemonkey 脚本中,并让它在每次调用用户脚本时重新加载脚本。

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

有没有办法解决这个问题?我一直在寻找答案,但到目前为止还没有运气。

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

// ==UserScript==
// @id             HET
// @name           SettingsHandler
// @version        1.0
// @namespace      HET
// @require        http://urltoscript/scripts/he/lib.js
// @run-at         document-end
// ==/UserScript==

我的外部脚本如下所示:

alert('got it');

出于测试目的,所有这些都非常容易。此设置有效,但仅在第一次并且当我更改我的 lib.js 脚本时,用户脚本仍会读取旧的。有没有办法防止用户脚本缓存外部脚本?或者还有其他可以帮助我的元标记吗?

在此先感谢,戴夫

4

4 回答 4

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
}
于 2015-05-07T19:18:33.897 回答
4

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

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

有几种方法可以减轻你的痛苦。:)

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

Rob M.的答案对我不起作用,因为 Tampermonkey 脚本位置注入它的目标站点可能不同。例如,在我的例子中,我还有一个本地运行的网络服务器,可以在 IDE 中使用 Tampermonkey for Firefox 进行开发,而无需从浏览器访问 Tampermonkey 的任何文件系统。

该脚本应该被注入到第三方站点,例如 example.com,它会在其中应用修改。所以浏览器会阻止这个脚本,因为它来自与 example.com 不同的域。

在开发过程中,我想在没有任何缓存的情况下让我的脚本立即应用更改。通过使用 GM.xmlHttpRequest 获取脚本内容来解决此问题。此外,带有当前时间戳的 GET 参数充当缓存破坏器:

let url = `http://localhost/myscript.js?ts=${(+new Date())}`

GM.xmlHttpRequest({
    method: "GET",
    url: url,
    onload: function(response) {
        let remoteScript = document.createElement('script')
        remoteScript.id = 'tm-dev-script'
        remoteScript.innerHTML = response.responseText
        document.body.appendChild(remoteScript)
    }
})

请注意,由于GM.xmlHttpRequest可以绕过相同的源策略,因此必须在脚本的头部明确授予访问权限:

// @grant        GM.xmlHttpRequest
于 2019-09-11T09:09:38.197 回答
-1

您可以将以下内容添加到您的 .htaccess 文件中:

<FilesMatch "filename.js">
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "0"
</FilesMatch>

完成开发后将其删除。

于 2015-05-07T19:18:40.237 回答