如何检测iframe中的错误404?

Chr*_*phe 28 javascript iframe http-status-code-404

我的网页使用iframe来收集其他网页的内容.所有页面都在同一个域中.

从主页面,有没有办法确认所有iframe已加载,并且没有404错误?

Ton*_*cas 18

状态仅存在于响应标头中.

404页面正在处理HTTP状态代码,该代码仅包含在发送到浏览器的服务器响应中,但不包含在javascript可能访问的DOM 的实际windowdocument对象中.这意味着虽然您当然可以收集状态代码并采取适当的操作,但您可能只在javascript收到响应时执行此操作,例如使用jQuery.ajax()请求XmlHttRequest来加载"iframe".

希望404页面遵循404标准.

如果以上不是一个选项,唯一的另一种可能性是检查"404"的标题和/或H标签.虽然这肯定不太理想(我很乐意看到,"404,电影未找到,电影."),这是你唯一的另一种选择.

$('#iframe').load(function (e) {
    var iframe = $("#iframe")[0];

    if ( iframe.innerHTML() ) {
        // get and check the Title (and H tags if you want)
        var ifTitle = iframe.contentDocument.title;
        if ( ifTitle.indexOf("404")>=0 ) {
            // we have a winner! probably a 404 page!
        }
    } else {
        // didn't load
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 我想这只有在Iframe中的文档位于同一个域中时才有效吗? (6认同)
  • 这似乎是正确的答案,但我不明白为什么他们没有实现这个微小但有用的功能 (3认同)
  • 跨域怎么样? (3认同)

mir*_*sif 16

假设这是你的HTML

<html>
    <head></head>
    <body>
      <iframe id="iframe"></iframe>
    </body>
 </html>
Run Code Online (Sandbox Code Playgroud)

有两种情况

  1. 您的iframe的src与您的网页所在的域位于同一个域中.

    Ex : page url www.example.com and iframe's src www.example.com/iframe
    
    Run Code Online (Sandbox Code Playgroud)

    您可以使用jQuery ajax请求来检查资源是否可用

       $(function() {
            $.ajax({
                type : "HEAD",
                async : true,
                url : "www.example.com/iframe"
            })
            .success(function() {
                $("#iframe").attr("src", "www.example.com/iframe");
            })
            .error(function(){
               // Handle error perhaps a failover url
            })
        });
    
    Run Code Online (Sandbox Code Playgroud)
  2. 您的iframe的src未指向您的网页所在的同一域.

    Ex : Page url www.example.com and iframe's src www.otherdomain.com/iframe
    
    Run Code Online (Sandbox Code Playgroud)

    现在浏览器不允许您根据跨源策略从javascript代码发出跨站点请求.解决方法是发出jsonp请求.

    $(function() {
        $.ajax({
            url: "www.otherdomain.com/iframe",
            dataType: "jsonp",
            timeout: 5000,
    
            success: function () {
                $("#iframe").attr("src", "www.otherdomain.com/iframe");
            },
            error: function (parsedjson) {
                if(parsedjson.status == "200") {
                    $("#iframe").attr("src", "www.otherdomain.com/iframe");
                } else {
                    // Handle error
                }
            }
        });
    });
    
    Run Code Online (Sandbox Code Playgroud)

  • 第2部分非常有趣,从未想过这一点. (3认同)