如何检查iframe是否加载失败? jQuery的?

我现在有这个jquery代码,它工作正常。 当用户单击提交按钮时它会执行什么操作,它会隐藏表单,显示加载程序,然后将数据提交到链接并在iframe中加载输出。

$(document).ready(function() { $("#xxx_form").validate({ submitHandler: function() { $('#input_form').hide('slow'); $('#loader').show('slow'); form.submit(); } }); $("#xxx_frame").load(function (){ $('#loader').hide('slow'); $('#history').show('slow'); $('#xxx_frame').show('slow'); }); 

});

这工作正常。 我需要的是如何检查iframe加载是否正常。 在我测试期间,他们是iframe超时或者发出无法连接到服务器的错误的时间。 由于ISP失败。 现在我需要检查这种错误,我该怎么做?

据我所知,没有办法在iframe中测试错误。 有.error()事件,但根据文档中的注释:

在iframe上使用.error()似乎永远不会触发(即使.load()会在成功的iframe加载时触发)。

也许你需要自己使用.load()事件来实现某种超时:如果加载事件(表示成功)不在例如5秒内触发,则假设出现错误。

尝试…

HTML:

 

JQUERY:

 $('#box').bind('error', function () { alert("loaded error"); } 

编辑:存在更多命令绑定加载错误

晚了,但我设法破解它:它没有检测iFrame是否正确加载,但它将检测服务器是否可访问。 为了您的使用,您可以翻转逻辑,并在服务器加载成功后隐藏一些内容。

起初,我想做一个AJAX调用来测试网站a)是否存在和b)允许跨源调用,除了它最初对我不起作用,因为我使用了jQuery。 如果你执行XMLHttpRequest,它可以很好地工作:

 var url = http://url_to_test.com/ var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status != 200) { console.log("iframe failed to load"); } }; xhttp.open("GET", url, true); xhttp.send(); 

编辑:
因此,这种方法可行,但由于交叉原始malarky,它有很多误报(拾取很多可能会显示在iframe中的东西)。 我解决这个问题的方法是在服务器上执行CURL / Web请求,然后检查响应头是否a)如果网站存在,b)如果头部设置了x-frame-options

如果您运行自己的网络服务器,这不是问题,因为您可以自己进行api调用。

我在node.js中的实现:

 app.get('/iframetest',function(req,res){ //Call using /iframetest?url=url - needs to be stripped of http:// or https:// var url = req.query.url; var request = require('https').request({host: url}, function(response){ //This does an https request - require('http') if you want to do a http request var headers = response.headers; if (typeof headers["x-frame-options"] != 'undefined') { res.send(false); //Headers don't allow iframe } else { res.send(true); //Headers don't disallow iframe } }); request.on('error',function(e){ res.send(false); //website unavailable }); request.end(); });