Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 允许电子托管的webapp调用window.open并使用结果,就像它是一个普通的Chrome窗口一样_Javascript_Node.js_Window_Electron - Fatal编程技术网

Javascript 允许电子托管的webapp调用window.open并使用结果,就像它是一个普通的Chrome窗口一样

Javascript 允许电子托管的webapp调用window.open并使用结果,就像它是一个普通的Chrome窗口一样,javascript,node.js,window,electron,Javascript,Node.js,Window,Electron,我在Electron的webview标签中托管的webapp调用窗口。打开。但是,无法从Electron中的iframe内部调用window.open,我被迫重写window.open,以便它向承载webapp的渲染器进程发送一条消息,并告诉它调用window.open并返回结果 从我的渲染器:webContents.send(“我的频道”,我的窗口) 然而,我似乎不能简单地将整个窗口发送回webapp。发送到webapp的窗口没有任何应该具有的功能(例如close)。我想如果它确实有一个clo

我在Electron的webview标签中托管的webapp调用
窗口。打开
。但是,无法从Electron中的iframe内部调用
window.open
,我被迫重写
window.open
,以便它向承载webapp的渲染器进程发送一条消息,并告诉它调用
window.open
并返回结果

从我的渲染器:
webContents.send(“我的频道”,我的窗口)

然而,我似乎不能简单地将整个窗口发送回webapp。发送到webapp的窗口没有任何应该具有的功能(例如
close
)。我想如果它确实有一个
close
,那会很奇怪,因为
close
需要知道如何(通过某种方式)跳出webapp,并提醒Electron的渲染器/主进程需要关闭一个窗口

我希望发送到webapp的
窗口
的行为或多或少像一个常规的Chrome窗口(即,我希望它具有相同的公共api)。所以,我的第一个问题是如何在webapp上设置这样一个窗口

我提出的解决方案如下。我仍然调用
window.open
在渲染器过程中,但不是传回结果窗口,而是传回一个具有windowId属性的对象,该属性设置为窗口的id。当该对象到达webapp时,它会通过一个小中介看到窗口对象并设置一些属性(如
close
focus
),它在内部向渲染器进程发送一条消息以执行相关操作(通过预加载脚本公开的函数)。例如:

myWindow = {
    windowId: 1,
    close: function() {
        sendActionFromWebviewToMain("close", this.windowId);
    }
}
我遇到的下一个问题是,Electron的
window.open
返回的窗口与
new BrowserWindow(…)
返回的窗口不同,它似乎没有id。引用的是guestId,但我无法访问它


如何使用
window.open
创建webapp可以交互的窗口?是否强制使用
BrowserWindow
构造函数创建窗口?

此问题已得到解决

我现在需要做的就是在我的webview标签上设置
nativeWindowOpen
allowpopups
属性,然后我就可以使用native
窗口。open

<webview webpreferences="nativeWindowOpen=yes" allowpopups />