有什么标准方法可以知道我的脚本是否可以访问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();
}
}
iframe
它有效,当我尝试访问' 的内容并最终进入catch
块时,Firefox 会引发错误。Chrome 在控制台中显示Unsafe JavaScript attempt to access frame
警告但从未进入该catch
块,它似乎会返回null
这些尝试,因此初始if (!d)
会处理它。Opera 和 IE 的行为与 FF 类似。编辑:使用上面的代码,现在 Chrome 返回一个“空”窗口对象(没有属性),它不会触发我的if
块。检查Esailija的答案,它可以很好地跨浏览器!
这是小提琴。
我无法测试iframe
'ssrc
与window.location
.
说明背景:这是因为这个功能是我正在开发的一个小图像上传插件的一部分(使用
iframe
as 目标,因为 IE<9 不支持 XHR2),目标主要是验证连接错误/超时/等。这些错误的默认浏览器页面受同源策略的约束,因此是这个问题的目的。我不想发送 ajax 调用来检查页面是否可用,因为我想验证提交请求本身。jQuery 的.load处理程序不会因错误而触发,jQuery 的.error和onerror
HTML 属性对此不起作用。此处提供了工作脚本的说明,但您可以完全忽略它并简单地回答以下问题。
请注意,上面的块仅用于说明为什么我不能使用iframe.src
.
我确实认为应该有一种更简单/标准的方法来检查 an的“可访问性”,但是除了简单地检查并且不适用于许多情况iframe
的半解决方案之外,我在网络上也找不到任何东西。iframe.src
如果我的 hackish try
/catch
块被认为是技术上“干净”的解决方案,如果没有找到更好的选择,其他人可能会重新使用它。
那么是否有任何标准或更简单的方法或 jQuery 插件来检查我的脚本是否可以访问iframe
' 的文档而无需将iframe
'src
与' 进行比较window.location
?如果可能,在控制台中没有try
/catch
块和错误/警告。