我想从iframe调用父窗口JavaScript函数.
rahul.. 425
Call Me
请参见window.parent
返回对当前窗口或子帧的父级的引用.
如果窗口没有父窗口,则其父属性是对自身的引用.
当在一个被加载的窗口,
或者
,它的父是与元件嵌入窗口的窗口.
Call Me
请参见window.parent
返回对当前窗口或子帧的父级的引用.
如果窗口没有父窗口,则其父属性是对自身的引用.
当在一个被加载的窗口,
或者
,它的父是与元件嵌入窗口的窗口.
我最近不得不找出为什么这也不起作用.
您要从子iframe调用的javascript需要位于父级的头部.如果它在正文中,则脚本在全局范围内不可用.
希望这可以帮助任何再次遇到这个问题的人.
此方法可安全地进行cross-origin
通信.
如果您可以访问父页面代码,则可以调用任何父方法,也可以直接从中传递任何数据Iframe
.这是一个小例子:
父页面:
if (window.addEventListener) { window.addEventListener("message", onMessage, false); } else if (window.attachEvent) { window.attachEvent("onmessage", onMessage, false); } function onMessage(event) { // Check sender origin to be trusted if (event.origin !== "http://example.com") return; var data = event.data; if (typeof(window[data.func]) == "function") { window[data.func].call(null, data.message); } } // Function to be called from iframe function parentFunc(message) { alert(message); }
iframe代码:
window.parent.postMessage({ 'func': 'parentFunc', 'message': 'Message text from iframe.' }, "*"); // Use target origin instead of *
参考文献:
跨文档消息传递
Window.postMessage()
我可以用吗
我将此作为单独的答案发布,因为它与我现有的答案无关.
此问题最近再次出现,用于从引用子域的iframe访问父级,并且现有修补程序不起作用.
这次的答案是修改父页面的document.domain和iframe是相同的.这将欺骗相同的原始策略检查,认为它们共存于完全相同的域(子域被视为不同的主机并且未通过相同的原始策略检查).
将以下内容插入iframe中的页面以匹配父域(根据您的doctype进行调整).
请注意,这将在localhost开发中引发错误,因此请使用如下所示的检查来避免错误:
if (!window.location.href.match(/localhost/gi)) { document.domain = "mydomain.com"; }
您可以使用
window.top
请参阅以下内容.