Подтвердить что ты не робот

Как я могу обрабатывать ошибки при загрузке iframe?

У меня есть <iframe>, который могут включать другие сайты, чтобы их пользователи могли POST вернуть форму на мой сайт. Я хотел бы изящно обрабатывать случаи, когда мой сайт отключен, или мой сервер не может обслуживать содержимое <iframe> (то есть тайм-аут ответа или ошибку 4xx или 5xx). Я попытался добавить объект onError к объекту <iframe>, но это, казалось, ничего не делало:

showIFrame = function() {
  var iframe = document.createElement('iframe');
  iframe.id = 'myIFrame';
  iframe.src = 'http://myserver.com/someURLThatFailsToLoad';
  iframe.onError = iframe.onerror = myHandler;
  document.body.appendChild(iframe);
};

myHandler = function(error) {
  document.getElementById('myIFrame').style.display = 'none';
  console.error('Error loading iframe contents: ' + error);
  return true;
};

Если мой сервер возвращает 404, я просто получаю содержимое не найденной страницы в <iframe>. Фактически, этот обработчик ошибок никогда не срабатывает. Есть ли способ сделать эту работу?

(Я сейчас тестирую в Chrome, но мне бы хотелось, чтобы он также работал для FF и IE >= 7.)

4b9b3361

Ответ 1

Чтобы определить, включен ли ваш сервер или нет, вы можете включить пустой файл script из своего собственного домена. Когда сервер не работает, обработчик события onerror запускает:

var el = document.createElement('script');
el.onerror = errorFunction;
el.src = "somebogusscript.js?" + new Date().getTime();
document.body.appendChild(el);

Примечание. Не забудьте добавить случайную строку в атрибут src, чтобы клиент не использовал кешированную версию (что вообще могло остановить просмотр на сервере).

Ответ 2

Возможно, вы могли бы попробовать onErrorUpdate для обработчика события? Я не видел обработчик onError для iFrames. Если это не сработает, вы можете попробовать onLoad, а затем проверить источник iframe или заголовок его для сообщения 404.

Например: if (frameDoc.title == 'title the server sends for 404') {


Источник:

http://bytes.com/topic/javascript/answers/166288-catch-404-when-using-iframe

iFrame Methods: http://www.java2s.com/Code/HTMLCSSReference/HTML-Tag-Reference/iframeJavaScriptMethods.htm

Свойства iFrame: http://www.java2s.com/Code/HTMLCSSReference/HTML-Tag-Reference/iframeJavaScriptProperties.htm

Ответ 3

Один из способов - установить тайм-аут JavaScript при выполнении запроса. Если ваш таймаут срабатывает перед событием onload iframe, содержимое не загружается. Затем вы можете установить iframe.src примерно: blank, delete или reuse iframe.