在不同的javascript窗口之间交谈?

Posted

技术标签:

【中文标题】在不同的javascript窗口之间交谈?【英文标题】:Talking between different javascript windows? 【发布时间】:2014-12-26 10:25:57 【问题描述】:

我有一个 asp.net 网页,其中包含一些 javascript 代码和一个查看不同网页的 iframe 元素,我的问题是:是否有任何可用的方法使这两个窗口相互通信?

例如:我在 asp.net javascript 代码中有一个名为“Say HelloWorld”的函数,如果单击 Iframe 页面中的按钮,则应从 Iframe 调用该函数

【问题讨论】:

如果可以control both pages,可以,否则不行。 【参考方案1】:

一般来说,如果您正在处理访问相同域/端口/协议组合的窗口,则会产生巨大的差异。换句话说,同源政策是否会以任何方式打扰您。无论 SOP 是什么,您都应该阅读以下内容:html5 postMessage

如果你严格地处理同一个域,你真的不需要像 postMessage 这样的魔法,但当然它也不会对你造成太大的伤害。

【讨论】:

在这种情况下,它们将托管在同一个域上,那么应该怎么做呢? @AhmedKamal 在这种情况下,您可以分别访问 windowdocument 对象。通过从 iFrame 访问 parent 或从父级访问 iframe.contentWindow。在那里你可以选择访问任何与 JS 相关的数据。 我尝试这样做,但框架网站的端口与 asp.net 父 Web 应用程序的端口不同。当我尝试从子级访问父级时,出现此错误 Uncaught SecurityError: Blocked a frame with origin "localhost:63430" from access a frame with origin "localhost".协议、域和端口必须匹配。 不同的端口意味着,你运气不好。然后,阅读有关 postMessage 的文章,SOP 不允许您使用任何其他内容。 好的,非常感谢您的支持,我已接受您的回答:)【参考方案2】:

从孩子呼叫父母:

<script>
function calledFromChildIframe()  
    alert("I am in Parent");

</script>

<iframe id="myFrame">
    ...........
    <a onclick="parent.calledFromChildIframe();" href="#" >Call Me </a>
</iframe>

来源:window.parent

对于相反的情况, 假设您的 iFrame 的 id 是“targetFrame”并且您要调用的函数是 targetFunction()

document.getElementById('targetFrame').contentWindow.targetFunction();

来源:here

【讨论】:

以上是关于在不同的javascript窗口之间交谈?的主要内容,如果未能解决你的问题,请参考以下文章

获取JavaScript和ASP.NET交谈(在AJAX之外)

使用Java和JavaScript之间的OAEP进行RSA加密

使用 JavaScript 在窗口/选项卡之间进行通信 [重复]

JavaScript;具有相同来源的选项卡/窗口之间的通信[重复]

JavaScript;具有相同来源的选项卡/窗口之间的通信[重复]

JavaScript(Iframewindow.openwindow.showModalDialog)父窗口与子窗口之间的操作