Tampermonkey引入localhost HTTPS的@require文件仅保存时更新问题
问题原因
这是Tampermonkey的默认正常行为,TM会对所有@require引入的外部资源做永久本地缓存,仅两种场景会触发重新拉取:
- 你在TM编辑器内修改并保存脚本时,会自动检测头信息变更,重新拉取所有
@require资源 - 脚本的
@version版本号提升时,会触发全量资源更新
普通页面刷新场景下,TM会直接读取本地缓存的@require文件,不会发起新请求,这个设计的初衷是减少重复网络请求,提升脚本加载效率。
可用解决方案
方案1:开发阶段改用动态脚本加载(最推荐,兼容所有浏览器,无特殊设置要求)
不需要在脚本头声明@require,直接在脚本逻辑内动态拉取本地服务的JS文件,每次刷新都自动拉取最新版本:
// ==UserScript== // @name myName // @description myDescription // @author robinlarondelle // @version 0.1 // @namespace myNameSpace // @homepage myHomePage // @include *linkedin.com/* // @icon https://www.google.com/s2/favicons?domain=linkedin.com // @grant window.onurlchange // @grant GM_xmlhttpRequest // ==/UserScript== // 动态拉取本地开发脚本,时间戳参数避免所有层级的缓存 GM_xmlhttpRequest({ method: 'GET', url: 'https://localhost:3000/public/myScript.user.js?t=' + Date.now(), onload: (res) => { // 开发环境直接执行即可,正式上线前再把代码打包后替换为@require引入 eval(res.responseText); } });
这个方案不需要修改任何浏览器或TM的全局设置,多开发者协作也不会有浏览器兼容性问题。
方案2:修改TM全局设置关闭@require缓存
如果不想改脚本逻辑,可以直接修改TM的配置:
- 打开TM管理面板,点击右上角「设置」
- 滚动到页面最底部,把「配置模式」切换为「高级」
- 找到「外部资源」分类,将「缓存@require和@resource」选项修改为「不缓存」
该方案是全局生效,开发完成后建议改回默认设置,避免影响其他正常脚本的加载速度。
内容的提问来源于stack exchange,提问作者Robin La Rondelle
相关产品推荐
相关产品推荐

