Javascript 如何在iframe';s使用Greasemonkey的父对象

Javascript 如何在iframe';s使用Greasemonkey的父对象,javascript,iframe,greasemonkey,Javascript,Iframe,Greasemonkey,我有一个Greasemonkey脚本,它在页面中添加了一个iframe(称为第1页)。iframe包含另一个页面(称为第2页)。脚本也在第2页上运行。第1页和第2页位于不同的域上 我希望允许第2页中运行的代码调用第1页上的函数。鉴于Greasemonkey代码的限制较低,这可能吗?浏览器将阻止这种情况,因为域不同 有两种技巧可用于帧间通信: 将其他网站的DNS记录添加到外部网站的域(www.somewebsite.com和someapp.somewebsite.com)。然后在两个页面的Java

我有一个Greasemonkey脚本,它在页面中添加了一个iframe(称为第1页)。iframe包含另一个页面(称为第2页)。脚本也在第2页上运行。第1页和第2页位于不同的域上


我希望允许第2页中运行的代码调用第1页上的函数。鉴于Greasemonkey代码的限制较低,这可能吗?

浏览器将阻止这种情况,因为域不同

有两种技巧可用于帧间通信:

  • 将其他网站的DNS记录添加到外部网站的域(www.somewebsite.com和someapp.somewebsite.com)。然后在两个页面的JavaScript中使用document.domain=“somewebsite.com”
  • 使用HTML 5 postMessage()在帧之间进行通信。我知道它适用于Firefox3和InternetExplorer8,但不适用于IE7
  • 通过设置父窗口的URL,可以将简单消息传递到另一个页面。 注意:浏览器似乎阻止设置父URL。此方法仅适用于从父帧到子帧的单向通信
  • 广告3: 您将无法读取另一帧的URL,但可以设置它。如果您将URL更改为完全相同的页面,但URL带有#锚定组件,则该页面实际上不会重新加载:

    window.frames["childFrame"].location.href = "http://www.somewebsite.com/#message"
    

    然后,您需要向外部页面添加一个脚本,定期轮询其location.href并处理消息。是的,这很难看,但如果做得好,它将在所有普通浏览器中都能工作。

    Ooh,postMessage()将很好地工作。我的想法是利用授予Greasemonkey脚本的特权绕过相同的域限制。这样比较好,;postMessage()实际上是用于此目的的。:)我现在必须支持IE7,所以我放弃了postMessage()。我也做不到#我可以,但我不能让它工作。至少在FF3中,我没有权限设置window.parent.location.href,甚至没有权限设置为父级的当前URL。我遗漏了什么吗?嗯,我只使用这种方法从父帧到嵌入帧进行通信,而不是相反。可能会有一些限制,以防止框架爆发并强制自己成为顶部页面。奇怪的是,我可以在顶部窗口上设置哈希,但不能在iframe的父窗口上设置哈希,而父窗口本身就是顶部窗口中的iframe。我提出了一个新问题: