【问题标题】:How to detect if HTTP requests are blocked by a browser extension?如何检测 HTTP 请求是否被浏览器扩展阻止?
【发布时间】:2020-05-07 00:50:52
【问题描述】:

我正在尝试检测用户是否在其浏览器中使用了某种扩展程序,这可能会阻止我的网站正常运行,如果是,则为用户显示一条消息。

我正在使用名为 uMatrix 的扩展程序进行测试,但还有其他人采用类似的方法。

我的问题是,这种扩展会阻止我的 HTTP 请求,但不会返回正确的状态代码(如 403、404、500 等)。相反,当我 catch 我的请求时,我只是得到一个

错误:网络错误

在[我的文件名和行号]

在 XMLHttpRequest.handleError (xhr.js:83)

我相信在其他情况下也会引发同样的错误,比如缺乏互联网连接,所以我不能假设这个Network Error 意味着用户有一个“HTTP 请求阻止程序”。

我阅读了很多关于在 this thread 和其他地方识别 AdsBlocker 的内容,但我认为这不适用于我的问题。

关于如何识别用户正在阻止我的 HTTP 请求的任何想法? (有意或通过浏览器扩展)

【问题讨论】:

    标签: javascript xmlhttprequest http-status-codes


    【解决方案1】:

    我想我会在这里分享我找到的解决方案,尽管我认为这还不是最好的答案。

    我正在使用 Axios 处理我的 API 请求,我在这里找到了这个帖子:

    https://github.com/axios/axios/issues/383#issuecomment-234079506

    他们建议检查response 是否有状态(但在最新的Axios 中,他们甚至不返回response)。如果没有,则意味着从未访问过服务器。这仍然可能意味着没有互联网连接,不一定是扩展程序阻止了请求。所以我调整了我的信息以涵盖这两种情况。

    我的最终代码是这样的:

    // Note the use of "HEAD", since that will be faster than a "GET"
    axios.head(server_url_for_testing).catch(function(error) {
      if (!error.response) {
        // Display my warning message
      }
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      相关资源
      最近更新 更多