【问题标题】:accessing variable in parent page from iframe从 iframe 访问父页面中的变量
【发布时间】:2015-12-28 01:57:13
【问题描述】:

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

我试过了

parent.observer = 'aadasds';

但我收到以下错误:

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

.

【问题讨论】:

  • 我们能看到一些代码/链接吗?
  • 一个代码示例会很有帮助。但是,我相信您只能在父页面中访问来自同一域的变量。如果 iframe 存在于与父级不同的域中,则可能是问题的根源。

标签: javascript iframe


【解决方案1】:

仅当两个站点来自同一个域时,才允许在 iframe(和父级)之间交换值。如果他们这样做,您的示例应该可以正常工作。如果他们不这样做,浏览器会阻止通信。

但是,有许多技巧可以规避这一点:例如,Julien le Comte's blog 中描述的 Yahoo.CrossFrame 库使用第三个 iframe 来启用单向通信,或者@中描述的“围绕 iframe 调整 iframe 的大小”-idea 987654322@启用双向通信。

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

【讨论】:

  • "只有当两个站点来自同一个域时,才允许在 iframe(和父级)之间交换值。如果这样做,您的示例应该可以正常工作。如果不这样做,浏览器会阻止通信。 " - 可以从 iframe 内的页面调用页面上的 javascript 函数吗?
  • @Niall Collins:是的,没有问题——只要两个页面都来自同一个域。据我所知,您描述的错误消息仅在它们来自不同域时才会出现。
  • 如果 iframe 在同一个域中,你会如何回答这个问题?
【解决方案2】:

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

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

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

window.parent.observer;

希望这可以帮助某人:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 2011-07-08
    • 2017-01-12
    • 2021-05-07
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    相关资源
    最近更新 更多