responsejs — javascript iframe устанавливает таймер и проверяет, загружен ли

javascript iframe устанавливает таймер и проверяет, загружен ли

Добро пожаловать в стек переполнения :)

Я считаю, что ваша проблема заключается в том, что вы устанавливаете onload и onerror после установки src.

Подумайте об этом так: ваш браузер пытается загрузить (или вывести ошибку) iframe как можно быстрее, как только src установлен, браузер начинает свою работу, если выдается ошибка (или успех) до того, как была установлена onload , там нечего ловить

TLDR — я думаю, что переключение порядка (сначала установка onload и onerror) должно решить вашу проблему.

Редактировать — так что я неправильно понял вопрос, да, есть ситуации, когда из iframe ничего не возвращается, в частности, я мог бы воспроизвести это с помощью этого кода на консоли здесь, в переполнении стека:

 var targetURL = 'localhost:1' var i = document.createElement('iframe'); i.onload = function() { alert('The link did load'); }; i.onerror = function(){ alert('The link did NOT load'); }; i.src = targetURL; document.body.appendChild(i); 

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

 let timer = setTimeout(() ={amp}gt; { alert('Error opening page'); }, 5000); var targetURL = 'localhost:1' var i = document.createElement('iframe'); i.onload = function() { alert('The link did load'); clearTimeout(timer); }; i.onerror = function(){ alert('The link did NOT load'); clearTimeout(timer); }; i.src = targetURL; document.body.appendChild(i); 

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

https://bugs.chromium.org/p/chromium/issues/detail?id=365457

К сожалению, кажется, что это спецификация, из сообщения об ошибке:

Я обсуждал это с Адамом Бартом, и мы подтвердили, что описанное здесь поведение — это поведение, описанное в спецификации Living HTML.

Следующее: Спецификация требует, чтобы все элементы HTML поддерживали событие onerror. Однако это НЕ требует, чтобы все элементы, поддерживающие сетевые выборки, вызывали простое событие, называемое onerror. То есть элементы должны поддерживать разрешение приложениям устанавливать обработчики ошибок, но нет (общего) требования, чтобы событие было вызвано, либо в HTML, либо в спецификации Fetch.

Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector