BrowserWindow を使用してアプリを表示していますが、外部リンクをデフォルトのブラウザーで強制的に開きたいと思います。それも可能ですか、それとも違うアプローチをしなければなりませんか?
前の答えから解決策を確認した後、私はこれを思いつきました。
mainWindow.webContents.on('new-window', function(e, url) {
e.preventDefault();
require('electron').Shell.openExternal(url);
});
電子仕様 によると、外部リンクがクリックされるとnew-window
が起動されます。
注:アンカータグでtarget="_blank"
を使用する必要があります。
anchor
要素でtarget="_blank"
を使用していない場合、これはうまくいくかもしれません:
const Shell = require('electron').Shell;
$(document).on('click', 'a[href^="http"]', function(event) {
event.preventDefault();
Shell.openExternal(this.href);
});
私はこれをテストしていませんが、これはうまくいくはずです:
1)WebContents
の- BrowserWindow
を取得
var wc = browserWindow.webContents;
2) will-navigate
of WebContent
に登録し、ナビゲーション/リンクのクリックをインターセプトします。
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
を使用してopenBrowser
を実装します。 Linuxデスクトップの例:
var openBrowser(url) {
require('child_process').exec('xdg-open ' + url);
}
これがあなたのために働くかどうか私に知らせてください!
来てくれる人のために。
私のユースケース:
私はアプリで SimpleMDE を使用していましたが、プレビューモードでは同じウィンドウでリンクが開かれていました。すべてのリンクをデフォルトのOSブラウザーで開くようにしました。 main.jsファイル内に、他の回答に基づいてこのスニペットを配置します。新しいBrowserWindowインスタンスを作成した後に呼び出します。私のインスタンスはmainWindowと呼ばれます
let wc = mainWindow.webContents
wc.on('will-navigate', function (e, url) {
if (url != wc.getURL()) {
e.preventDefault()
electron.Shell.openExternal(url)
}
})
これを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)
}
})
Electron 5では、これが私にとってはうまくいったものです:
_main.js
_(ブラウザウィンドウを作成する場所)で、メインのrequireステートメント(通常はファイルの先頭)に「シェル」を含めます。例:
// Modules to control application life and create native browser window const { BrowserWindow, Shell } = require('electron');
createWindow()
関数内で、mainWindow = new BrowserWindow({ ... })
関数の後に、次の行を追加します。
mainWindow.webContents.on('new-window', function(e, url) { e.preventDefault(); Shell.openExternal(url); });