我有一个父html页面,它使用jquery附加一个动态iframe,它有一个源到另一个域。我已经设置了X-Frame-Options来允许这一点,并且加载普通内容不是问题。事实上,我所有的其他脚本似乎都工作得很好。
在iFrame中加载的html页面,使用jQuery的DirtyForms插件,其中有几行看起来像$(document)。脏表单代码和jQuery脚本都是iframe文档的本地代码。
当这些行执行时,我在Firefox中收到以下错误(我没有测试过任何其他浏览器),错误:Permission denied to access property 'document'.
我一直在阅读这个,这似乎是一个问题,如果父页面试图访问孩子的脚本或反之亦然,但在我的情况下,出错的脚本是本地的孩子。
顺便说一句。子代码,当不在iFrame内加载时,可以完美地工作。
我现在不知道如何找到一个解决办法。
我假设$(document)以某种方式被计算为父节点。
有办法纠正这种行为吗?也许可以通过修改插件代码。也许,$(文档);(contentWindow)…? ?
我很感激你的帮助!谢谢。你不能访问它,现在的问题是为什么?
请查看下面的链接
拒绝访问属性'document'
错误:Permission denied to access property 'document'
在你的情况下,如果你想做任何页面加载,那么最好使用下面的代码IFrame
<iframe ........ onload='yourFunction( this )'>
在Dirty Forms中X中,默认行为将事件处理程序附加到当前页面所在的任何父页面中的锚标记。这样做的代码如下:
$(top.document).on('click', 'a', aBindFn);
$(top.document).on('submit', 'form', formBindFn);
也就是说,它将事件处理程序附加到window.top.document
。您可以使用以下命令关闭该行为:
$.DirtyForms.watchParentDocs = false;
在Dirty Forms中这个行为已经被移除,因为它只适用于iFrame的一个特定用例(在iFrame中托管使用Dirty Forms的表单)。您现在可以自定义事件绑定,以便根据页面需要将事件处理程序附加到父(主机)页面或子iframe,但默认情况下没有与iframe交互。这应该允许您能够解决诸如此类的问题。