Как определить, заблокированы ли HTTP-запросы расширением браузера? - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь определить, использует ли пользователь какое-либо расширение в своем браузере, которое может помешать правильной работе моего сайта, и, если это так, отобразить сообщение для пользователя.

Я тестирую с расширение называется uMatrix , но есть и другие с похожим подходом.

Моя проблема в том, что такое расширение блокирует мой HTTP-запрос, но не возвращает правильный код состояния ( как 403, 404, 500 и др. c). Вместо этого, когда я catch запрашиваю, я просто получаю

Ошибка: ошибка сети

в [мое имя файла и номер строки здесь]

в XMLHttpRequest.handleError (xhr. js: 83)

Я полагаю, что эта же ошибка возникнет в других обстоятельствах, таких как отсутствие соединения inte rnet, поэтому я не могу предположить это Network Error означает, что у пользователя есть «блокировщик HTTP-запросов».

Я много читал об идентификации AdsBlocker в этой теме и других местах, но я не думаю, что это относится к моя проблема.

Есть идеи, как определить, что пользователь блокирует мои HTTP-запросы? (Либо специально, либо через расширение браузера)

1 Ответ

0 голосов
/ 22 января 2020

Я думал, что поделюсь здесь решением, которое нашел, хотя я не думаю, что это лучший ответ.

Я использую Ax ios для своих запросов API, и я нашел эту тему здесь :

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

Они предлагают проверить, есть ли у response статус (но в последнем Ax ios они не даже не вернуть response). Если нет, это означает, что сервер никогда не был достигнут. Это все еще может означать, что нет соединения inte rnet, необязательно расширение заблокировало запрос. Поэтому я настроил свое сообщение так, чтобы оно охватывало оба сценария ios.

Мой окончательный код был примерно таким:

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