在不同的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 在这种情况下,您可以分别访问window
和 document
对象。通过从 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)父窗口与子窗口之间的操作