当前位置:  开发笔记 > 编程语言 > 正文

从iframe调用父窗口函数

如何解决《从iframe调用父窗口函数》经验,为你挑选了5个好方法。

我想从iframe调用父窗口JavaScript函数.




rahul.. 425

Call Me 

请参见window.parent

返回对当前窗口或子帧的父级的引用.

如果窗口没有父窗口,则其父属性是对自身的引用.

当在一个被加载的窗口

希望这可以帮助任何再次遇到这个问题的人.


如果我没记错的话,如果iframe与父母的域名不同,我就无法按预期工作.对不起,这不是一个解决方案,但它可以解释为什么它不起作用.

3> Andrii Verby..:

Window.postMessage()

此方法可安全地进行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()

我可以用吗


值得提出来(从[MDN Web文档](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage)):如果您知道,请始终提供特定的targetOrigin,而不是*另一个窗口的文档应位于的位置。未能提供特定的目标会泄露您发送到任何感兴趣的恶意站点的数据

4> Ash Clarke..:

我将此作为单独的答案发布,因为它与我现有的答案无关.

此问题最近再次出现,用于从引用子域的iframe访问父级,并且现有修补程序不起作用.

这次的答案是修改父页面的document.domain和iframe是相同的.这将欺骗相同的原始策略检查,认为它们共存于完全相同的域(子域被视为不同的主机并且未通过相同的原始策略检查).

将以下内容插入iframe中的页面以匹配父域(根据您的doctype进行调整).


请注意,这将在localhost开发中引发错误,因此请使用如下所示的检查来避免错误:

if (!window.location.href.match(/localhost/gi)) {
    document.domain = "mydomain.com";
} 


值得注意的是(至少在Google Chrome中)父母和孩子都必须设置document.domain,即使其中一个已经"正确"了!示例:Parent是`example.com` iframe是`abc.example.com`,然后parent和iframe都必须调用`document.domain ="example.com"`

5> Vinothkumar ..:

您可以使用

window.top

请参阅以下内容.


    


    

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有