繁体   English   中英

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

[英]How can I call a function in an iframe's parent using Greasemonkey

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

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

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

您可以使用一些技巧在框架之间进行通信:

  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并处理消息。 是的,这很丑陋,但是如果操作正确,它将可以在所有常见的浏览器中使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM