当 nativeWindowOpen 在父窗口中为真时,electron.js 中 webview 中基于 target=_blank 的链接未打开
Posted
技术标签:
【中文标题】当 nativeWindowOpen 在父窗口中为真时,electron.js 中 webview 中基于 target=_blank 的链接未打开【英文标题】:target=_blank based link in webview in electron.js are not opening when nativeWindowOpen is true in parent window 【发布时间】:2021-11-11 07:49:42 【问题描述】:我有一个简单的electron.js 应用程序,electron-quick-start 我在其中使用<webview>
。
默认情况下,设置了target=_blank
的链接不会在webview
内打开。
通过收听在Can't open Electron webview links with target = blank 给出的new-window
事件有一些解决方法
但是当nativeWindowOpen: true
in webPreferences
在父窗口中时,此解决方法不起作用。当我在MacOS
上添加allowpopups
并出现错误exited with signal SIGSEGV
时,应用程序会崩溃
const mainWindow = new BrowserWindow(
width: 800,
height: 600,
webPreferences:
preload: path.join(__dirname, 'preload.js'),
webviewTag: true,
nativeWindowOpen: true // This flag is not letting recieve new-window event from webview
)
index.html
是
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<title>Hello World!</title>
</head>
<body>
<h1>Hello World!</h1>
<webview id="foo" src="https://www.w3schools.com/tags/att_a_target.asp" style="display:inline-flex; width:640px; height:480px" allowpopups></webview>
<h1>click on Try it yuorself button in webview</h1>
<!-- You can also require other files to run in this process -->
<!-- <script src="./renderer.js"></script> -->
</body>
</html>
我怎样才能在 target=_blank
工作的地方获得 webview 链接,而 nativeWindowOpen: true
保持在父窗口中?
根据Planned Breaking API Changes (15.0),nativeWindowOpen
将默认设置为true
【问题讨论】:
不需要在webview标签webpreferences="nativeWindowOpen=yes" allowpopups
上设置nativeWindowOpen
true吗?
我尝试添加webpreferences="nativeWindowOpen=yes"
,但仍然没有接到new-window
事件的调用。添加allowpopups
也会使我的电子应用程序崩溃。
为什么allowpopups
会导致您的应用崩溃?粘贴您用来拦截新窗口的代码?没看到
关于***.com/questions/48914542 的进一步请求,我没有时间构建测试代码,但也许您可以在文档electronjs.org/docs/api/window-open 中查看:“自定义或取消创建窗口,您可以选择在主进程中使用 webContents.setWindowOpenHandler() 设置覆盖处理程序。返回 false 会取消窗口,而返回一个对象会设置创建窗口时使用的 BrowserWindowConstructorOptions ....."
@pushkin:我已经添加了index.html
的代码,或者您也可以尝试在我的代码中设置nativeWindowOpen: true
和allowpopups
,就像在我的index.html
中一样,然后尝试单击具有target=_blank
。在我的 MacOS 上它崩溃了
【参考方案1】:
我试过用 Electron fiddle 写一个要点。也许我没有发现你的问题,但对我来说它正在工作 https://gist.github.com/deb6ed0fa37860fdfc0d51c6782f4152
【讨论】:
我已经添加了我的index.html
代码。您也可以尝试在我的代码中设置nativeWindowOpen: true
,在我的index.html
中设置allowpopups
,然后尝试单击具有target=_blank
的链接。在我的 MacOS 上它崩溃了【参考方案2】:
这是一个错误 https://github.com/electron/electron/pull/29874 已修复。
electron 12.0.14 或更高版本可以很好地解决这个问题。
【讨论】:
以上是关于当 nativeWindowOpen 在父窗口中为真时,electron.js 中 webview 中基于 target=_blank 的链接未打开的主要内容,如果未能解决你的问题,请参考以下文章