Как я могу обработать ошибки при загрузке iframe? - PullRequest
19 голосов
/ 14 сентября 2010

У меня есть <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.)

Ответы [ 3 ]

12 голосов
/ 14 сентября 2010

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

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

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

3 голосов
/ 14 сентября 2010

Возможно, вы могли бы попробовать 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: http://www.java2s.com/Code/HTMLCSSReference/HTML-Tag-Reference/iframeJavaScriptMethods.htm

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

1 голос
/ 29 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...