如何在加载iframe时处理错误?

时间:2010-09-13 23:11:27

标签: javascript html iframe error-handling

我有一个其他网站可以包含的<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&gt; = 7.)

3 个答案:

答案 0 :(得分:12)

要检测服务器是否已关闭,您可以在自己的域中包含一个空脚本文件。当服务器关闭时,onerror事件处理程序将触发:

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

注意:不要忘记在src属性中添加随机字符串,以避免客户端使用缓存版本(可能会停止查看服务器)。

答案 1 :(得分:3)

也许您可以尝试使用onErrorUpdate作为事件处理程序?我看不到iFrames的onError处理程序。如果这不起作用,您可以尝试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

答案 2 :(得分:1)

一种技术是在发出请求时设置JavaScript超时。如果超时在iframe onload事件之前触发,则内容未加载。然后,您可以将iframe.src设置为about:blank,delete或iframe。