错误:在 iFrame 中访问属性“文档”的权限被拒绝
Posted
技术标签:
【中文标题】错误:在 iFrame 中访问属性“文档”的权限被拒绝【英文标题】:Error: Permission denied to access property 'document' in iFrame 【发布时间】:2014-06-23 21:45:25 【问题描述】:我有一个父 html 页面,它使用 jquery 将具有源的动态 iframe 附加到另一个域。我已经设置了 X-Frame-Options 以允许这样做,并且加载纯内容不是问题。事实上,我所有的其他脚本似乎都运行良好。
在 iFrame 中加载的 html 页面使用 jQuery DirtyForms plugin,其中有几行类似于 $(document)。脏表单代码和 jQuery 脚本都是 iframe 文档的本地代码。
当执行这些行中的任何一行时,我在 Firefox 中收到以下错误(我尚未测试任何其他浏览器),错误:访问属性“文档”的权限被拒绝。
我一直在阅读这方面的内容,如果父页面试图访问孩子的脚本或反之亦然,这似乎是一个问题,但在我的情况下,出错的脚本是孩子本地的。
顺便说一句。子代码,当未在 iFrame 中加载时,可以完美运行。
我现在找不到解决方法。
我假设 $(document) 以某种方式被评估为父级。
有什么方法可以纠正这种行为吗?也许通过修改插件代码。也许,$(document).find('contentWindow')...??
感谢您的帮助!谢谢。
【问题讨论】:
如果“正在执行的代码在 iFrame 中并且仅与 iFrame 相关”,您为什么需要访问contentWindow
?
【参考方案1】:
好吧,您无法访问它..现在问题是为什么?
为此,只需通过以下链接
Permission denied to access property 'document'
Error: Permission denied to access property 'document'
如果你想在页面加载时做任何事情,那么最好使用下面的 IFrame 代码
<iframe ........ onload='yourFunction( this )'>
【讨论】:
这两个问题都与试图在子 iframe 中执行代码的父级有关。在我的情况下,情况并非如此。正在执行的代码位于 iFrame 中,并且仅与 iFrame 相关。【参考方案2】:在 Dirty Forms 1.x 中,默认行为将事件处理程序附加到当前页面所在的任何父页面中的锚标记。执行此操作的代码如下所示:
$(top.document).on('click', 'a', aBindFn);
$(top.document).on('submit', 'form', formBindFn);
也就是说,它将事件处理程序附加到window.top.document
。您可以使用以下方法关闭该行为:
$.DirtyForms.watchParentDocs = false;
在 Dirty Forms 2.x 中,此行为已被删除,因为它仅适用于 iFrame 的一个特定用例(在 iFrame 中托管使用 Dirty Forms 的表单)。您现在可以customize event binding 将事件处理程序附加到父(主机)页面或页面需要的子 iFrame,但默认情况下不与 iFrame 交互。这应该使您能够解决诸如此类的问题。
【讨论】:
以上是关于错误:在 iFrame 中访问属性“文档”的权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
尝试访问以编程方式创建的 <iframe> 的文档对象时出现“访问被拒绝”JavaScript 错误(仅限 IE)
在 vba 中获取 iframe 的 Contentwindow - 访问被拒绝/权限被拒绝