Javascript 如何在iframe中检测错误404?
我的网页使用iFrame从其他网页收集内容。所有页面都在同一个域中 从主页上,是否有方法确认所有iFrame都已加载,并且没有404错误?状态仅存在于响应标题中。 404页面正在处理一个,它只包含在服务器发送到浏览器的响应中,而不包含在javascript可以访问的DOM的实际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”的标题和
窗口和文档对象中。这意味着,虽然您当然可以收集状态代码并采取适当的操作,但您只能在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
}
}
});
});