Javascript 如何在iframe中检测错误404?

Javascript 如何在iframe中检测错误404?,javascript,iframe,http-status-code-404,Javascript,Iframe,Http Status Code 404,我的网页使用iFrame从其他网页收集内容。所有页面都在同一个域中 从主页上,是否有方法确认所有iFrame都已加载,并且没有404错误?状态仅存在于响应标题中。 404页面正在处理一个,它只包含在服务器发送到浏览器的响应中,而不包含在javascript可以访问的DOM的实际窗口和文档对象中。这意味着,虽然您当然可以收集状态代码并采取适当的操作,但您只能在javascript接收到响应时这样做,例如使用或 希望404页面遵循404标准。 如果以上不是选项,唯一的其他可能是检查“404”的标题和

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

从主页上,是否有方法确认所有iFrame都已加载,并且没有404错误?

状态仅存在于响应标题中。 404页面正在处理一个,它只包含在服务器发送到浏览器的响应中,而不包含在javascript可以访问的DOM的实际
窗口
文档
对象中。这意味着,虽然您当然可以收集状态代码并采取适当的操作,但您只能在javascript接收到响应时这样做,例如使用或

希望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
    }
});

假设这是您的html

<html>
    <head></head>
    <body>
      <iframe id="iframe"></iframe>
    </body>
 </html>
您可以使用jQueryAjax请求检查资源是否可用

   $(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
        })
    });
  • iframe的src没有指向页面的起始域

    Ex : page url www.example.com and iframe's src www.example.com/iframe
    
    Ex : Page url www.example.com and iframe's src www.otherdomain.com/iframe
    
    现在浏览器将不允许您从javascript代码发出跨站点请求,原因是。解决的办法是做一个决定


  • 可能重复:@Slytael确实这是一个类似的问题。。。但是5岁了,没有有效的答案。可能重复前面的问题,答案有用:@JukkaK.Korpela不幸的是,这对我不起作用。我需要一个JavaScript解决方案,不需要php。这似乎是正确的答案,但我不明白为什么他们没有实现这个微小但有用的功能。我想只有当Iframe中的文档位于同一个域上时,这才有效?跨域呢?@TimoHuovinen有关跨域文档,请参阅我答案的第二部分。@silvanasono,如果您拥有这些域,您可以使用CORS和/或访问控制允许源标题。如果没有,请使用下面提供的答案mirmdasif。我会在他的回答中注意到,因为ajax响应中包含了整个HTML,所以您可以只更新DOM,而不是通过加载iframe发出另一个请求。第2部分非常有趣,从未想过。如果是跨域请求,则不可能。@Tony Chiboucas这是另一种方式。但是,您必须处理允许请求URL的防火墙服务器。此外,您可能也没有任何后端。如果是这种情况,您必须在客户端处理。@TonyChiboucas除了调用
    src=url\u address
    之外,您不能在iframe中放置内容,至少不能以传统方式。如果您想将内容放入iframe中,我想您可以通过编写一些javascript来实现这一点。使用ajax方法,您可以确定何时发生错误并显示正确的消息。否则,如果出现错误,iframe仍然显示error,那么用户的区别是什么?错误可能是企业软件中的消息,使得服务器调用新url并不总是简单的。你需要处理防火墙和其他事情。
    $(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
                }
            }
        });
    });