如何执行从iframe到主窗口的javascript调用
how can i execute a javascript call from iframe to the main window?
我需要使用postMessage
执行从iframe到主窗口的javascript调用show();
。这个答案显示了如何使用postMessage
,但没有显示如何在主窗口上调用函数。如何调用主窗口上的函数?
我需要使用postMessage方法执行从iframe到主窗口的javascript调用"show();"
不能通过postMessage
调用函数。postMessage
发布(发送)消息。该消息在目标窗口上导致函数调用的唯一方法是,目标窗口通过调用该函数来处理该消息。
如果窗口在同一原点上
同源中的窗口(请参阅:SOP)可以相互访问,因此如果show
是全局函数,则iframe中的代码可以这样调用它:
parent.show();
如果窗口位于不同的原点
您不能直接在目标窗口中调用show()
。那个窗口中的代码必须这样做。
如果您控制着目标窗口,您可以让它通过查看它发送的数据来响应消息(如链接问题的答案中所示),并在适当的情况下调用show()
。
但是,如果没有目标窗口中的代码,就无法执行此操作。
我帮助开发了一个名为Endpoint.js的项目(在npm和bower.io上称为"endpointjs"),该项目能够通过iframe、windows、tab、浏览器、服务器进程等包装远程对象。
同源
要做你想做的事,你可以这样做(在父母身上):
var adapter = window.endpoint.registerAdapter('window-object', '1.0', window);
然后,在iframe上你会做:
var facade = window.endpoint.createFacade('window-object','1.0', { neighborhood: 'group' });
facade.on('ready', function() {
facade.getApi().show();
});
交叉原点
如果你是跨原点的,那就有点复杂了。你必须在两侧添加一个跨原点链接:
在iframe:中
var windowLinkConfig = {
linkId: 'link-example0.com',
type: 'window',
settings: {
origin: 'http://example0.com:80',
external: true
}
};
var link = window.endpoint.getConfiguration().addLink(windowLinkConfig);
link.nannounceWindow(windowparent);
在父级中:
var windowLinkConfig = {
linkId: 'link-example1.com',
type: 'window',
settings: {
origin: 'http://example1.com:80',
external: true
}
};
window.endpoint.getConfiguration().addLink(windowLinkConfig);
然后,为了安全起见,你必须稍微调整一下适配器:
var adapter = window.endpoint.registerAdapter('window-object', '1.0', window, { neighborhood: 'universal' });
您可以在这里查看跨原点工作的示例。您可能想要包装窗口对象,并且只公开您想要的方法。。。否则iframe将完全访问父窗口对象的方法。
- 从父窗口调用iframe函数
- 从另一个窗口调用 iframe
- 为什么从子窗口调用时父窗口的 OnChange 事件文本框不起作用
- 在 Javascript 中,如果作为子窗口调用,则使用 focus() 设置的文本区域不起作用
- 从 Angular 中声明的子窗口调用主窗口中的函数
- 在点击事件上从父窗口调用子窗口的功能在 Safari 和 Chrome 上不起作用
- 从模式弹出窗口调用 SignalR Javascript 函数
- 如何将JSON对象传递到通过模态窗口调用的PHP文件
- 从弹出窗口调用主窗口
- 从父窗口调用Iframe中的函数
- 从子窗口调用父窗口的JavaScript
- 如何从子窗口调用父窗口函数
- IIFE单例全局未定义,除非作为窗口调用.Xyz = ilife()
- 我有js在xul文件,我想从主窗口调用特定的函数
- 从子窗口调用操作,关闭子窗口并重新加载父页面
- 如何使用窗口.调用页方法的位置
- 我怎么能从谷歌地图信息窗口调用Angular2函数呢?
- 加载时在新窗口调用函数
- 从弹出窗口调用操作
- 从vb.net的模态窗口调用javascript函数