如何检测浏览器扩展是否阻止了HTTP请求?

3

我想检测用户是否正在使用某种浏览器扩展程序,以防止我的网站正常工作,如果是,则向用户显示一条消息。

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

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

Error: Network Error

at [我的文件名和行号在此]

at XMLHttpRequest.handleError (xhr.js:83)

我认为在其他情况下也会抛出同样的错误,比如缺乏互联网连接,因此我不能假设这个Network Error意味着用户拥有“HTTP请求阻止器”。

我正在阅读关于在此线程和其他地方识别广告拦截程序的文章,但我认为这不适用于我的问题。

有什么想法可以确定用户是否正在阻止我的HTTP请求?(无论是有意还是通过浏览器扩展程序)

1个回答

3

虽然我认为这不是最佳答案,但我想在这里分享我找到的解决方案。

我在我的API请求中使用Axios,并在这里找到了这个线程:

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
  }
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接