从iframe访问父页面中的变量

时间:2010-10-07 22:40:36

标签: javascript iframe

我有一个包含html页面的iframe页面。我想从iframe中访问父页面中的Javascript变量。主页面中变量的名称为observer

我试过这个

parent.observer = 'aadasds';

但是我收到以下错误:

  

获取属性Window.observer的权限被拒绝   来自

2 个答案:

答案 0 :(得分:3)

仅当两个站点来自同一域时,才允许在iframe(和父级)之间交换值。如果他们这样做,那么你的例子应该可行。如果他们不这样做,浏览器会禁止通信。

然而,有许多黑客可以绕过这个问题:例如Julien le Comte's blog中描述的Yahoo.CrossFrame库使用第三个iframe来启用单向通信,或者“调整iframe周围的iframe大小”-idea描述在Adam Fortuna's blog中实现双向沟通。

编辑(因为人们似乎还在阅读这个旧答案):
在现代浏览器中,您可以使用postMessage在iframe之间交换数据。有许多javascript库试图在旧版浏览器中模拟该功能。例如。通过误用location.hash,就像jquery-postmessage-plugin那样。

答案 1 :(得分:2)

听起来好像你的iframe正在使用不同的域名。如果不使用相同的域,则所有主要浏览器都会阻止访问父iframe。 IE如果您拥有域www.test.com,并且您嵌入了www.google.com中的某个页面并尝试访问/修改Google网站上的任何内容,则您将被拒绝访问。

此问题的另一个答案解释了已实施的API post message。这也可以用于从不同域的不同帧发送/接收数据。但是,与使用相同域的两个帧相比,使用它可以做的事情是有限的。

话虽如此,如果您的iframe使用的是同一个域,这里就是答案。

window.parent.observer;

希望这有助于某人:)