2010-10-07 66 views
4

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

我已经试过这

parent.observer = 'aadasds'; 

,但我收到以下错误:

Permission denied for to get property Window.observer from

。 I帧(及家长)之间

+0

我们可以看到一些代码/链接? – 2010-10-07 22:44:55

+2

代码示例会很有帮助。不过,我相信你只能在父页面访问一个变量,如果它来自同一个域。如果iframe存在于父项之外的其他域中,则可能是问题的根源。 – 2010-10-07 23:03:26

+0

http://www.dyn-web.com/tutorials/iframes/ – zod 2010-10-08 02:56:55

回答

3

交换价值,如果这两个网站都来自同一个域只允许。如果他们这样做,你的例子应该工作。如果他们不这样做,浏览器会禁止通信。

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

编辑(因为人们似乎仍然看这个老答案):
在现代浏览器可以使用postMessage到I帧之间交换数据。有许多JavaScript库也尝试在旧版浏览器中模拟该功能。例如。通过误用location.hash,就像jquery-postmessage-plugin一样。

+0

“交换I帧(及家长)之间的值,如果这两个网站都来自同一个域只允许。如果他们这样做,你的榜样应该只是工作。如果他们不会,浏览器禁止通信。“ - 页面中的javascript函数是否可以从iframe中的页面调用? – amateur 2010-10-08 08:23:32

+0

@Niall Collins:是的,没有问题 - 只要这两个页面来自同一个域。据我所知,你描述的错误信息只有在源自不同域时才会出现。 – tec 2010-10-08 15:51:55

+0

你会如何回答这个问题iframe是否在同一个域名? – www139 2015-12-27 16:54:02

2

听起来好像你的iframe使用不同的域。如果不使用相同的域,所有主流浏览器都会阻止访问父内部框架。 IE如果你有域名www.test.com,并且你从www.google.com中嵌入了一个页面,并尝试从谷歌网站访问/修改任何东西,你将被拒绝访问。

对方回答这个问题说明了实现API post message。这也可以用来发送/接收来自不同域的不同帧的数据。但是,与使用相同域的两个框架相比,您可以使用的功能有限。

话虽这么说,这里是如果你的I帧都使用相同的域答案。

window.parent.observer; 

希望这可以帮助别人:)