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

时间:2020-01-21 01:25:50

标签: javascript xmlhttprequest http-status-codes

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

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

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

错误:网络错误

在[我的文件名和行号在这里]

at XMLHttpRequest.handleError(xhr.js:83)

我相信在其他情况下(例如,缺乏Internet连接)也会抛出相同的错误,因此我不能假设此Network Error意味着用户具有“ HTTP请求阻止程序”。

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

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

1 个答案:

答案 0 :(得分:1)

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

我正在使用Axios进行API请求,并且在这里找到了该线程:

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

他们建议检查$somevar = "sd300.somedata.cd.vm.someotherdata.cd.vm"; $somevar = preg_replace("/(.*\..*\..*\..*)\..*\..*\..*/", '$1', $somevar); var_dump($somevar); 是否具有状态(但是在最新的Axios中,他们甚至没有返回response)。如果不是,则表示服务器从未到达过。那仍然可能意味着没有互联网连接,不一定是扩展阻止了该请求。因此,我调整了信息以涵盖两种情况。

我的最终代码是这样的:

response