如何检测iframe中的错误404?

时间:2013-05-11 16:04:43

标签: javascript iframe http-status-code-404

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

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

2 个答案:

答案 0 :(得分:18)

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

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

希望404页面符合404标准。

如果以上不是一个选项,唯一的另一种可能性是检查标题和/或H标签,以便" 404"。虽然这肯定不太理想(我很乐意看到,#34; 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
    }
});

答案 1 :(得分:15)

假设这是你的html

<html>
    <head></head>
    <body>
      <iframe id="iframe"></iframe>
    </body>
 </html>

有两种情况

  1. 您的iframe的src与您的网页所在的域名相同。

    Ex : page url www.example.com and iframe's src www.example.com/iframe
    

    您可以使用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
            })
        });
    
  2. 您的iframe的src未指向您的网页所在的同一个域。

    Ex : Page url www.example.com and iframe's src www.otherdomain.com/iframe
    

    现在,由于cross origin policy,浏览器不允许您通过javascript代码发出跨网站请求。方法是制作jsonp request

    $(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
                }
            }
        });
    });