首页 > 解决方案 > 有没有办法在 Tampermonkey 上加载所需资源时捕获错误?

问题描述

我有一个带有@require 注释的tampermonkey 脚本,该脚本为我提供了某些工具,以便脚本以特定方式工作。

然而,有时这个库不可用(它落后于登录,所以如果没有找到会话,@require 会返回一个带有“未经授权”解释的纯 html)。

我的目标是能够捕获资源是否已成功加载,并且如果它没有提供已处理的错误,我无法做到 - 我只是收到浏览器关于接收 < 符号的投诉出乎意料(因为@require 产生的纯html)。

您对如何解决这个问题有任何想法吗?我检查了 Tampermonkey 文档,但无济于事。

提前致谢

标签: tampermonkeygreasemonkey-4

解决方案


您可以使用GM.xmlHttpRequest从 url 加载源。然后检查responseText“未经授权”文本的结果,然后eval()执行Function()代码,请参阅MDN 了解这两者之间的区别。您可以在每次执行脚本时执行此操作,也可以使用 GM.getValue/GM.setValue 缓存 responseText

GM.xmlHttpRequest({
  method: "GET",
  url: "https://www.example.com/yourlibrary.js",
  onload: function (response) {
    if (!response.responseText.startsWith('unauthorized string')) {
      window.eval(response.responseText)
      main()
    } else {
      // ask for login
    }
  },
  onerror: function () {
    // ask for login
  }
})

function main () {
  // ... you userscript ...
}
    

推荐阅读