我怎样才能强制从浏览器窗口的外部链接打开在默认浏览器从电子?

我正在使用BrowserWindow来显示一个应用程序,我想强制在默认浏览器中打开外部链接。 这甚至有可能,或者我必须以不同的方式处理?

我从前面的答案中检查了解决scheme后想出了这个。

main.webContents.on('new-window', function(e, url) { e.preventDefault(); require('electron').shell.openExternal(url); }); 

根据电子规格 ,当外部链接被点击时, new-window被触发。

如果您在anchor元素中没有使用target="_blank" ,这可能适合您:

  const shell = require('electron').shell; $(document).on('click', 'a[href^="http"]', function(event) { event.preventDefault(); shell.openExternal(this.href); }); 

我没有testing这个,但我认为这是应该工作:

1)获取BrowserWindow WebContents

  var wc = browserWindow.webContents; 

2)注册WebContent will-navigate和拦截导航/链接点击:

 wc.on('will-navigate', function(e, url) { /* If url isn't the actual page */ if(url != wc.getURL()) { e.preventDefault(); openBrowser(url); } } 

3)使用child_process实现child_process 。 Linux桌面的一个例子:

 var openBrowser(url) { require('child_process').exec('xdg-open ' + url); } 

让我知道这是否适合你!

对于任何人来。

我的用例:

我在我的应用程序中使用SimpleMDE ,它的预览模式是在同一窗口中打开链接。 我想要在默认的OS浏览器中打开所有链接。 我把这个片段,基于其他答案,在我的main.js文件中。 它在创build新的BrowserWindow实例之后调用它。 我的实例被称为mainWindow

 let wc = mainWindow.webContents wc.on('will-navigate', function (e, url) { if (url != wc.getURL()) { e.preventDefault() electron.shell.openExternal(url) } }) 

检查请求的url是否是外部链接。 如果是,那么使用shell.openExternal

 mainWindow.webContents.on('will-navigate', function(e, reqUrl) { let getHost = url=>require('url').parse(url).host; let reqHost = getHost(reqUrl); let isExternal = reqHost && reqHost != getHost(wc.getURL()); if(isExternal) { e.preventDefault(); electron.shell.openExternal(reqUrl); } } 

把这个放在renderer side js文件中。 它会在用户的默认浏览器中打开httphttps链接。

没有JQuery附加! 不需要target="_blank"

 let shell = require('electron').shell document.addEventListener('click', function (event) { if (event.target.tagName === 'A' && event.target.href.startsWith('http')) { event.preventDefault() shell.openExternal(event.target.href) } })