#javascript #firefox-addon #http-status-codes
#javascript #firefox-дополнение #http-status-codes
Вопрос:
Я разрабатываю дополнение для Firefox, которое выполняет действия, если statuscode является ошибкой 4xx или 5xx. Он работает довольно хорошо, как и сейчас, но не предпринимает действий, если код ошибки равен 408. Firefox выдает мне ошибку, но ошибка никогда не достигает моего расширения.
Мой httpobserver выглядит следующим образом:
observe: function(aSubject, aTopic, aData)
{
if (aTopic == 'http-on-examine-response')
{
httpstatus = aSubject.responseStatus.toString();
if(httpstatus.substr(0,1) in {4:1,5:1})
{
...
Я также попытался установить окно предупреждения после установки httpstatus (прямо перед if), которое предупреждает обо всех полученных кодах, за исключением ошибки 408.
Кто-нибудь знает, как это сделать? Заранее спасибо!
Ответ №1:
Скорее всего, вы имеете в виду не HTTP-ответ «Истекло время ожидания 408» (это могло бы произойти, например, если прокси-сервер не может связаться с сервером), а NS_ERROR_NET_TIMEOUT
— ошибку, сгенерированную Gecko, если он не может связаться с сервером. http-on-examine-response
уведомление запускается только в том случае, если получен ответ от сервера, поскольку NS_ERROR_NET_TIMEOUT
это не тот случай.
К сожалению, прослушивание таких ошибок невозможно с помощью наблюдателей. Вы можете использовать прослушиватель прогресса, всякий раз, когда загрузка останавливается, его onStateChange
метод будет вызываться с флагом aStateFlags
including LOAD_STOP
и aStatus
являющимся статусом канала ( NS_ERROR_NET_TIMEOUT
в данном случае).
Комментарии:
1.Я имею в виду код ошибки 408, я разработал сервлет, который отправляет коды ошибок моему клиенту (в целях тестирования). Ваше решение у меня не работает, может быть, я сделал это неправильно? Я попробовал следующие
aStatus == 0x804B000E
aStatus == "NS_ERROR_NET_TIMEOUT"
иaStatus == "0x804B000E"
, но ни один из них не работает. Есть предложения?2. @Termi:
aStatus == Components.results.NS_ERROR_NET_TIMEOUT
но в остальном я не могу особо помочь, не видя никакого кода.3. Теперь это работает, спасибо за вашу помощь! Я предупредил aStatus и NS_ERROR_NET_TIMEOUT и выяснил, что если ошибка равна 408, то NS_ERROR_NET_TIMEOUT был на 6 пунктов ниже aStatus, поэтому я просто добавил 6, и теперь он отлично работает.
4. @Termi: «на 6 пунктов выше» будет NS_ERROR_NET_RESET — «Сброс соединения одноранговым узлом». Похоже, ваш сервлет работает некорректно. Смотрите nsNetError.h для получения полного списка сетевых ошибок.
5. Пока это работает так, как есть, у меня нет проблем… Я могу вернуться сюда, если во время тестов возникнут ошибки, но все же спасибо.