2012-03-20 126 views
9

我遇到了从iFrame访问父窗口的任务,如果iFrame中的窗口是从另一个域加载的。如果我理解正确,现在所有现代浏览器都允许这样做。所以我在这里找到最好的解决方案。从iframe访问父窗口(跨域)

我要做到这一点在下方式:

我有在它的iFrame覆盖。这将工作,而不是弹出窗口,以防止弹出窗口阻止程序阻止我的内容。当iFrame中的文档完成一些工作时,任务是重新加载主页面。 在文档中,这将被载入到一个iFrame,我会加

<div id="is_closed" class="false"></div> 

父窗口中,我将添加功能,这将被称为每一秒,并检查是否该div仍然有类名“假”。当这将被改为“真”时,我会调用一些回调。

如果您有更好的解决方案,请与我分享。将感谢任何帮助。

编辑:这是不可能的,因为它不仅不可能从子窗口操作父窗口,反之亦然。我的想法是从父窗口操纵子窗口。我错了。

+1

'如果我理解正确,所有现代浏览器现在都允许这样做。所以我在这里找到最好的解决方案。“这**是你的解决方案。你所问的是不可能的。 – 2012-03-20 14:11:47

+8

'postMessage'在跨不同域的iframe中工作。 – kirilloid 2012-03-20 14:13:20

+1

Malgin:如果可能,任何Iframe内容都可能劫持主机页面。这已被DELIBERATELY禁用。没有解决方案没有“最佳解决方案”。 – 2012-03-20 14:14:36

回答

12

如果我理解正确,现在所有现代浏览器都允许这样做。所以我在这里找到最好的解决方案。

您的解决方案。你所问的是不可能的。

查看相关问题:

编辑

如在下面的意见,@JeremysA提到令人敬畏的答案提供了一种方法,可以在某些情况下允许跨域请求。有关更多信息,请参阅下面的SO问题。

Ways to circumvent the same-origin policy

+1

我知道这是不可能的从子窗口_manipulate_父窗口。我正在寻找的是如何模仿这种操纵。换句话说,从父窗口运行一段代码的子窗口中的一些标志将会执行。 – 2012-03-20 14:28:29

+1

@Malgin,再次,这是不可能的。您要求在页面之间进行**脚本级交互**。这不可能。你无法模仿一些无法完成的事情。有很多关于这个问题的问题。请参阅编辑。 – 2012-03-20 14:34:19

+1

我唯一不清楚的是你从父窗口操作子窗口是不可能的。这是我的想法,让我更持久。再次感谢。 – 2012-03-20 17:06:18

5

,但你可以改变iframesrc属性(添加例如#hashtag),听在子窗口onhashchange事件。鉴于你有能力改变这两个页面。

-3

在sessionStorage中设置一个变量/项目,并根据需要在两侧使用它。 localStorage可以做更长的时间。

安全风险是有人使用和操纵它来劫持你的一面。但如果有人想这样做 - 总会有一种可能性。

记住:生活找到一种方法...... ;-)

+1

问题是跨域访问。您无法访问本地存储/会话存储跨域? – Sudi 2017-05-11 17:15:08

+0

如果您知道变量的名称,则可以使用它跨域 – 2017-06-21 21:36:37

相关问题