我的网页使用 iframe 从其他页面收集内容。所有页面都在同一个域中。
从主页,有没有办法确认所有 iframe 都已加载,并且没有 404 错误?
我的网页使用 iframe 从其他页面收集内容。所有页面都在同一个域中。
从主页,有没有办法确认所有 iframe 都已加载,并且没有 404 错误?
404 页面正在处理一个HTTP 状态代码,它只包含在服务器发送到浏览器的响应中,而不包含在javascript 可能访问的 DOM的实际window
和对象中。document
这意味着虽然您当然可以收集状态码并采取适当的措施,但您只能在您的 javascript 接收响应时这样做,例如使用jQuery.ajax() 请求或XmlHttRequest 来加载您的 "iframe"。
如果以上不是一个选项,则唯一的其他可能性可能是检查“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>
有两种情况
您的 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
})
});
您的 iframe 的 src 未指向您的页面起源的同一个域。
Ex : Page url www.example.com and iframe's src www.otherdomain.com/iframe
由于跨源策略,现在浏览器将不允许您从 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
}
}
});
});