如何让Tampermonkey自动从基础认证站点下载脚本更新?
Tampermonkey脚本更新问题解决方案
问题核心原因
Tampermonkey的自动更新逻辑是先拉取@updateURL指向的元文件,对比其中的@version和本地脚本版本。如果元文件版本更高,才会触发@downloadURL的下载。你遇到的情况大概率是以下原因:
- Tampermonkey还没到预设的更新检查周期,或者缓存了旧的元文件
- 自动更新时Tampermonkey不会主动弹出Basic Auth验证窗口,导致下载请求被拦截
解决办法
1. 手动强制触发更新
直接在Tampermonkey面板找到该脚本,右键选择「检查更新」(或点击脚本详情页的「检查更新」按钮)。此时Tampermonkey会立即拉取最新的元文件,发现版本差异后会弹出Basic Auth窗口,输入账号密码即可完成更新。
2. 调整Tampermonkey更新设置
进入Tampermonkey的「设置」页面,找到「更新」板块:
- 将「检查更新频率」调为「每次浏览器启动时」或「每天」,确保能及时获取新的元文件
- 关闭「缓存更新请求」选项,避免Tampermonkey复用旧的元文件缓存
3. 嵌入认证信息到下载链接(仅限信任环境)
如果希望自动更新时无需手动输入密码,可以把Basic Auth的账号密码直接嵌入@downloadURL中,格式如下:
// @downloadURL https://用户名:密码@my.site/reserved/blah.user.js
⚠️ 注意:这种方式会把明文密码存在脚本里,仅适合个人使用或完全信任的环境,不要在公共脚本中使用。
4. 自行实现版本检测与提示(最灵活的方案)
如果上述方法都无法满足需求,可以在脚本内自定义版本检测逻辑,主动拉取公开的元文件对比版本,然后在页面上显示更新提示:
- 首先给脚本添加
@grant GM_info权限,用于获取当前脚本版本 - 添加以下代码实现检测逻辑:
// 获取当前脚本版本 const currentVersion = GM_info.script.version; // 每天检查一次版本(可自行调整间隔) setInterval(async () => { try { // 拉取公开的元文件 const res = await fetch('https://my.site/public/blah.meta.js'); const metaText = await res.text(); // 匹配元文件中的版本号 const versionMatch = metaText.match(/\/\/ @version\s+(\S+)/); if (versionMatch && versionMatch[1] > currentVersion) { // 创建更新提示元素 const updateNotice = document.createElement('div'); updateNotice.style.cssText = ` position: fixed; top: 20px; right: 20px; padding: 12px 18px; background: #f5a623; color: #fff; border-radius: 4px; z-index: 99999; `; updateNotice.innerHTML = `Tampermonkey脚本有新版本!<a href="https://my.site/reserved/blah.user.js" target="_blank" style="color:#fff; margin-left:8px;">点击更新</a>`; // 避免重复添加提示 if (!document.querySelector('.tm-update-notice')) { updateNotice.classList.add('tm-update-notice'); document.body.appendChild(updateNotice); } } } catch (error) { console.log('版本检查失败:', error); } }, 86400000); // 86400000毫秒 = 1天
用户点击提示中的链接后,浏览器会自动弹出Basic Auth窗口,输入账号密码即可完成更新。
内容的提问来源于stack exchange,提问作者Sampisa
相关产品推荐
相关产品推荐

