我使用jQuery Form插件进行异步表单提交.对于包含文件的表单,它会将表单复制到隐藏的iframe,提交它,并复制iframe的内容.问题是我无法弄清楚如何找到服务器返回的HTTP状态代码.例如,如果服务器返回404,则iframe中的数据将被正常复制并视为常规响应.
我试过在iframe对象中寻找某种status_code属性,但是却找不到那样的东西.
该$.ajax()功能无法使用,因为它不支持上传文件.异步上传我所知道的文件的唯一方法是使用隐藏iframe方法.
我的网页使用iframe来收集其他网页的内容.所有页面都在同一个域中.
从主页面,有没有办法确认所有iframe已加载,并且没有404错误?
有没有标准的方法来知道我的脚本是否可以访问iframe文档?
我在网上找不到任何东西所以我想出了这个:
function checkifr() {
function errHandler() {
alert('Error. Try again later.');
}
var ifr = $('#ifr')[0]; //the iframe DOM element
try {
var d = ifr.contentWindow || ifr.contentDocument;
if (!d) {
errHandler();
return false;
}
var b = $('#ifr').contents().find('body');
//... manipulate iframe content
} catch(e) {
errHandler();
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,当我尝试访问iframe内容并最终在catch块中时,Firefox会抛出错误.Chrome Unsafe JavaScript attempt to access frame在控制台中显示警告但从未进入catch阻止状态,它似乎会返回null这些尝试,因此初始if (!d)处理它.Opera和IE的行为类似于FF.编辑:使用上面的代码,现在Chrome返回一个"空"Window对象(没有属性),它不会触发我的if块.检查Esailija的答案,它可以很好地跨浏览器!
这是小提琴. …