如何使用 Greasemonkey 调用 iframe 父级中的函数
我有一个 Greasemonkey 脚本,它将一个 iframe 添加到页面(称为第 1 页)。 iframe 包含另一个页面(称为第 2 页)。 该脚本也在第 2 页上运行。 第 1 页和第 2 页位于不同的域。
我想允许第 2 页中运行的代码调用第 1 页上的函数。考虑到 Greasemonkey 代码的限制较低,这可能吗?
I have a Greasemonkey script which adds an iframe to the page (call it Page 1). The iframe contains another page (call it Page 2). The script runs on Page 2 as well. Pages 1 and 2 are on different domains.
I'd like to allow code running in Page 2 to call a function on Page 1. Given the lower restrictions on Greasemonkey code, is this possible?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
浏览器会阻止这种情况,因为域不同。
您可以使用一些技巧在框架之间进行通信:
注意:浏览器似乎阻止设置父 URL。 此方法仅适用于从父框架到子框架的单向通信。
广告3:
您将无法读取其他框架的 URL,但可以对其进行设置。 如果您将 URL 更改为完全相同的页面,但在 URL 中使用 #anchor 组件,则页面实际上不会重新加载:
然后您需要向外部页面添加一个脚本,定期轮询其 location.href 并进行处理的消息。 是的,它很丑陋,但如果做得好,它可以在所有常见的浏览器中运行。
The browser will prevent this, because the domains are different.
There are a couple of tricks you can use to communicate between frames:
Note: It appears browsers prevent setting of the parent URL. This method will this only work for one-way communication from parent to child frame.
Ad 3:
You won't be able to read the other frame's URL, but you can set it. If you change the URL to the exact same page, but with an #anchor component to the URL, the page will not actually reload:
You'd then need to add a script to the outer page that regularly polls it's location.href and process the messages. Yes, it's ugly, but if done right, it will work in all common browsers.