javascript - 允许子 Iframe 从不同域调用其父窗口上的函数

标签 javascript iframe cross-domain

我制作了一个在 IFrame 中加载的页面,它需要在加载完成后调用父页面上的函数。

它在本地开发中工作(在同一域上),但在现实世界中它托管在完全不同的域上,所以显然我遇到了跨域问题,即:

不安全的 JavaScript 尝试从 URL http://[...]site2.com/iframe 的框架访问 URL http://[...]site1.com 的框架。域、协议(protocol)和端口必须匹配。

我控制两台服务器,所以我是否可以在一台或两台服务器上放置一些东西,允许它们相互通信?

我研究过在 Iframe 页面和父页面中设置“document.domain”。

我尝试过设置访问控制 header :

header('Access-Control-Allow-Origin: *');

但是这些都不起作用。

当我控制两台服务器时,是否有任何方法允许 Iframe 在完全不同的域上调用父窗口中的函数?

最佳答案

您可以通过 message posting API 在框架之间进行通信.

例如,在您的子框架中您可以调用:

parent.postMessage("child frame", "*");

并在父框架中注册一个消息处理程序:

window.addEventListener("message", function(event) {
    console.log("Hello from " + event.data);
});

关于javascript - 允许子 Iframe 从不同域调用其父窗口上的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13042615/

相关文章:

javascript - 输入组件 : React does not recognize the prop on a DOM Element

javascript - 使用 PHP AJAX 或 js 操作后获取文档源

javascript - 无法跨域获取格式错误的 JSON

c# - c#中php的等效代码是什么

javascript - Canvas 被 CORS 图像污染

javascript - 从一个 channel 记录消息

javascript - 可见时加载 iframe

PHP 在 iframe 中打开链接

testing - Selenium WebDriver : How to wait for iframes to load completely? 可以点击 iframe 元素文本框 id = “div_4_1_2_1_1-lnk”

javascript - 从 Javascript 中的电话号码中删除 () 和 - 和空格