如何使用Greasemonkey在iframe的父级中调用函数

时间:2009-06-07 20:36:32

标签: javascript iframe greasemonkey

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

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

1 个答案:

答案 0 :(得分:1)

浏览器会阻止这种情况,因为域名不同。

您可以使用几种技巧在帧之间进行通信:

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

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

    然后,您需要向外部页面添加一个脚本,定期轮询它的location.href并处理消息。是的,这很难看,但如果做得好,它将适用于所有常见的浏览器。