electron 电子链接在新窗口中打开

1sbrub3j  于 2023-02-01  发布在  Electron
关注(0)|答案(3)|浏览(369)

我有一个奇怪的问题。在我的应用程序中,很少有链接到其他.html文件。在Mac OS或Windows 7上,链接在同一个窗口中打开,但在Windows 10中,它们在新窗口中打开。我不知道是怎么回事...也许你知道?链接看起来像(没有什么不同):

<a href="page.html?id={{ id }}">Some link</a>
envsm3lx

envsm3lx1#

我不知道在你的应用程序中打开新窗口是怎么回事,所以这不会导致你的问题。
但是,假设您的窗口是由恶意的window.open调用(或target="_blank”)创建的,您可以阻止新窗口事件并加载您的win,如下所示:

win.webContents.on('new-window', (event, url) => {
    event.preventDefault()
    win.loadURL(url)
})

在此查看更多详情

5rgfhyps

5rgfhyps2#

我在触摸屏Linux设备上运行的Electron/Vue.js应用程序也遇到了同样的问题,触摸链接有时会在新窗口中打开它。Jann 3的答案是有效的,但会导致重新加载Vue应用程序,这会带来很多延迟。
我发现了一个Electron的变通方法,就是简单地从Electron的主进程向渲染器进程发送一条消息,在本例中使用Vue的路由器。同样的逻辑应该适用于渲染器进程中使用的任何东西:
电子主流程:

win = new BrowserWindow({
  ...
})

win.webContents.on('new-window', (event, url) => {
  event.preventDefault()
  win.webContents.send('blocked-new-window', url)
})

Vue路由器.js:

require('electron').ipcRenderer.on('blocked-new-window', (event, url) => {
   router.push({path: url.split('#/')[1] || '/'})
})

以下是有关在主进程和渲染器进程之间发送消息的详细信息:https://electronjs.org/docs/api/web-contents#contentssendchannel-arg1-arg2-

jckbn6z7

jckbn6z73#

这已从电子中删除,见:www.example.com网站。https://www.electronjs.org/docs/latest/breaking-changes#planned-breaking-api-changes-220.
您现在可以使用www.example.com。https://www.electronjs.org/docs/latest/api/web-contents#contentssetwindowopenhandlerhandler.

mainWindow.webContents.setWindowOpenHandler((details) => {
  return { action: 'deny' }
});

相关问题