我现在有这个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故障。现在我需要检查这种错误,我该怎么做?
答案 0 :(得分:1)
据我所知,没有办法在iframe中测试错误。有.error()
事件,但根据文档中的评论:
在iframe上使用.error()似乎永远不会触发(即使.load()会在成功加载iframe时触发)。
也许您需要使用.load()
事件自行实现某种超时:如果加载事件(表示成功)未在例如5秒内触发,则表示出错。
答案 1 :(得分:0)
...试
HTML:
<iframe id="box" ...
JQUERY:
$('#box').bind('error', function () {
alert("loaded error");
}
编辑:存在更多命令绑定加载或错误
答案 2 :(得分:0)
派对迟到了,但是我设法破解了它:它没有检测到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();
});