0

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

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

4

1 回答 1

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 将简单消息传递到另一个页面。 注意:浏览器似乎阻止了父 URL 的设置。此方法仅适用于从父框架到子框架的单向通信。

广告 3:您将无法读取其他框架的 URL,但您可以设置它。如果您将 URL 更改为完全相同的页面,但在 URL 中添加了 #anchor 组件,则该页面实际上不会重新加载:

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

然后,您需要向外部页面添加一个脚本,该脚本定期轮询它的 location.href 并处理消息。是的,它很丑,但如果做得好,它可以在所有常见的浏览器中运行。

于 2009-06-07T20:54:16.433 回答