代码之家  ›  专栏  ›  技术社区  ›  James A. Rosen

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

  •  19
  • James A. Rosen  · 技术社区  · 14 年前

    我有一个 <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 年前
        1
  •  12
  •   Marcel Korpel    14 年前

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

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

    注意:不要忘记向 src 属性以避免客户端使用缓存版本(这可能会停止对服务器的查看)。

        2
  •  3
  •   Joel Kennedy    14 年前

    也许你可以试试 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

        3
  •  1
  •   Sam Watkins    12 年前

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