Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

Opening a Link in the Default Browser

警告: この記事では仕様が未確定のインターフェイスを使っています。これらのインターフェイスは新しいバージョンの Mozilla で変更される可能性があり、その時はこのコードが動かなくなるかもしれません。

XULRunner のアプリケーションからデフォルトブラウザで URI を開きたい時があるかもしれません。 これは HTTP または HTTPS の URI についての場合が多いのですが、それについて使用できる外部ハンドラが存在するあらゆるスキームについてもこの方法を使用できます。 これは nsIExternalProtocolService インターフェイスを使って行うことができます。

// まず ioservice を用いて nsIURI オブジェクトを作る
var ioservice = Components.classes["@mozilla.org/network/io-service;1"]
                          .getService(Components.interfaces.nsIIOService);

var uriToOpen = ioservice.newURI("http://www.example.com/", null, null);

var extps = Components.classes["@mozilla.org/uriloader/external-protocol-service;1"]
                      .getService(Components.interfaces.nsIExternalProtocolService);

// そしてそれを開く
extps.loadURI(uriToOpen, null);

デフォルトでは、外部プロトコルサービスは他のアプリケーションでリンクを開くことについてユーザに警告します。 デフォルトアプリケーションで開いても安全な特定のプロトコルについての警告を抑制するには、デフォルトの設定項目をセットする必要があります(Thunderbird では以下の設定を使用しています)。

// suppress external-load warning for standard browser schemes
pref("network.protocol-handler.warn-external.http", false);
pref("network.protocol-handler.warn-external.https", false);
pref("network.protocol-handler.warn-external.ftp", false);

あるスキームについての外部ハンドラが存在しているかどうか確認することもできます。これはそれを行う方法です。

var extps = Components.classes["@mozilla.org/uriloader/external-protocol-service;1"]
                      .getService(Components.interfaces.nsIExternalProtocolService);
if (extps.externalProtocolHandlerExists("http")) {
  // http:// URL に対するハンドラが存在する
}

IFrame 内のリンク

インラインフレームの "src" として指定されている html 文書内のリンクをデフォルトブラウザで開けるようにするには、次の設定項目をセットします。

pref("network.protocol-handler.expose-all", false);

これでうまくいくようです。

Interwiki Language Links

ドキュメントのタグと貢献者

 このページの貢献者: Electrolysis, Okome, Kacchi, Kozawa, Mole
 最終更新者: Electrolysis,