警告: この記事では仕様が未確定のインターフェイスを使っています。これらのインターフェイスは新しいバージョンの 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("https://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")) { // https:// URL に対するハンドラが存在する }
IFrame 内のリンク
インラインフレームの "src" として指定されている html 文書内のリンクをデフォルトブラウザで開けるようにするには、次の設定項目をセットします。
pref("network.protocol-handler.expose-all", false);
これでうまくいくようです。
Interwiki Language Links