当它们不是相同的协议时,如何在子 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", '*');
});
我正在使用 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", '*');
});