我怎样才能强制从浏览器窗口的外部链接打开在默认浏览器从电子?
我正在使用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
文件中。 它会在用户的默认浏览器中打开http
, https
链接。
没有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) } })