在 iframe 父级中访问 div

Posted

技术标签:

【中文标题】在 iframe 父级中访问 div【英文标题】:access div in iframe parent 【发布时间】:2012-07-27 21:44:33 【问题描述】:

我有一个包含 iframe 到另一个页面的页面,我正在寻找的是单击 iframe 内的某些内容,然后可以访问或更具体地隐藏父级中的 div。我知道一些 JQuery,但由于某种原因,当我尝试自己编写它时,我只是茫然地坐在代码编辑器中

【问题讨论】:

页面和 iframe 是否托管在同一个子域上? 是的,如果代码需要进入,我可以访问这两个页面 @Andrew Morris 代码访问不是问题——但浏览器不允许跨不同域的 javascript 操作。并且这些域必须完全匹配(即使协议必须相同——你不能从 http 站点通过 JS 处理 https 站点) @feeela,我阅读了相同的域策略,我知道页面不会受此限制,我只是忘了在问题中提及它。不过还是谢谢 【参考方案1】:

在 iframe 中试试这个:

$('#DIVtobehidden', window.parent.document).hide();

【讨论】:

如果父级在不同的域上,这会起作用吗? 这个答案帮助我解决了我遇到的类似问题,为旧的第 3 方 Web 应用程序添加了自定义增强功能 - 但它不是完整的解决方案。在我的情况下,我需要在父框架中的元素上调用 .trigger('someevent') ,但它不起作用 - JQuery 数据结构中似乎没有事件处理程序。相反,我不得不求助于看起来相当 hacky 的构造:window.parent.$("myselector").trigger("someevent") 尽管很丑,但至少有工作的好处!【参考方案2】:
$("#element-In-Iframe").on('click', function() 
    $('#element-in-parent-window', window.parent.document).hide();
);

FIDDLE

【讨论】:

@CrystalMiller - 它曾经在三年前工作,请注意它也与接受的答案完全相同。这些天 JSFiddle 正在从一个 shell 子域运行它自己的 iframe,所以同源策略开始了。【参考方案3】:

如果两个页面都在同一个(子)域上,您应该能够通过以下方式访问父窗口:

window.parent.document.getElementById('divId')

好吧,这没有 jQuery,但应该可以工作

【讨论】:

以上是关于在 iframe 父级中访问 div的主要内容,如果未能解决你的问题,请参考以下文章

从 Iframe 调用父级中的 Fancybox,无需手动打开

在 Fancybox 中合并“从 iframe 在父级中打开”、“侧面标题”和“自定义标题”

从 iframe 调用父级中的 Fancybox

我可以从另一个域的 iframe 父级访问 javascript

从父级中的子级访问元素标记名

PHP在父级中访问子级的私有属性