web-dev-qa-db-ja.com

Electronからのリンクをブラウザで開く

Electronアプリ内のリンクにアクセスするのではなく、Electronからのリンクの新しいブラウザー(デフォルトのOSブラウザーを意味します)ウィンドウを開くための(シンプルな/組み込みの)方法はありますか?

32
saadel

単に使用できます:

require("Shell").openExternal("http://www.google.com")
43
zianwar

@Marceloが提案したものよりもはるかに優れたシンプルな方法がありますが、@ zianwarが提案したものにすべてのリンクを一度に実装するのは簡単です。

const Shell = require('electron').Shell;

// assuming $ is jQuery
$(document).on('click', 'a[href^="http"]', function(event) {
    event.preventDefault();
    Shell.openExternal(this.href);
});

注:jQueryが必要です。

23
niieani

すべてのElectronリンクをデフォルトのOSブラウザーで外部で開くには、onclickプロパティを追加し、hrefプロパティを変更して、Electronアプリに何も読み込まないようにする必要があります。

次のようなものを使用できます。

aTags = document.getElementsByTagName("a");
for (var i = 0; i < aTags.length; i++) {
  aTags[i].setAttribute("onclick","require('Shell').openExternal('" + aTags[i].href + "')");
  aTags[i].href = "#";
}

しかし、ドキュメント全体がbefore実行する前にロードされていることを確認してくださいこれ以外の場合は動作しません。より堅牢な実装は次のようになります。

if (document.readyState != "complete") {
  document.addEventListener('DOMContentLoaded', function() {
    prepareTags()
  }, false);
} else {
  prepareTags();
}

function prepareTags(){
  aTags = document.getElementsByTagName("a");
  for (var i = 0; i < aTags.length; i++) {
    aTags[i].setAttribute("onclick","require('Shell').openExternal('" + aTags[i].href + "')");
    aTags[i].href = "#";
  }
  return false;
}

外部ファイルをロードする場合、このプロセスも同様に実行する必要があることに注意してくださいafter完全にロードされます。

2