当它们不是相同的协议时,如何在子 iframe 的顶部 window 中调用 api?

How to call api in top window in the child iframe when they are not the same protocol?

我正在使用 nwjs。我在应用程序页面中放置了一个 iframe(顶部 window):

<iframe src="aaa.com" id="contentFrame"></iframe>

我想告诉应用程序页面(顶部window)运行 iframe(域:aaa.com)中的一些功能:

<!-- code in the iframe-->
<input type="button" value="close" onclick="window.top.close();"></input>
<input type="button" value="window.top._close" onclick="window.top._close();"></input>

当我在 iframe 中点击上面的按钮时,出现错误:

未捕获的安全错误:阻止了来源为“http://localhost:3900”的框架访问来源为 "file://" 的框架。请求访问的帧协议为 "http",被访问的帧协议为 "file"。协议必须匹配。

我试图在package.json中设置这个参数:

"chromium-args": "--disable-web-security",

但它只适用于 "window.to.close();" 按钮。

我也想用这种方式调用 Native UI API:

require('nw.gui').gui.Window.get().minimize();

此致。

我不知道如何允许这样做,但您可以使用 Window.postMessage 在框架之间进行安全通信。

 // in parent window
 window.addEventListener("message", function (event) {
    if (event.data == "closeYourSelf") window.close();
 }, false);

 // in child iframe
 $('button.close').bind('click', function (clickEv) {
   clickEv.preventDefault();
   window.top.postMessage("closeYourSelf", '*');
 });