Navigator の registerProtocolHandler() メソッドは、ウェブサイトが自身を特定のプロトコルのハンドラー候補として登録できるようにします。

ブラウザはハンドラーのドメインとプロトコルが現在のサイトと一致する場合のみプロトコルハンドラーの登録を許可します。加えて、 registerProtocolHandler() の使用にあたり安全なコンテキスト (つまり HTTPS で読み込まれたページ) を要求するようになりつつあります。

ブラウザによってはこれらの制限を上書きする方法が提供されるかもしれません。

構文

navigator.registerProtocolHandler(protocol, url, title);

パラメーター

protocol
サイトが処理したいプロトコルを指定する文字列。例えば SMS のテキストメッセージリンクを処理するには、"sms" スキームを処理するように登録します。
url
ハンドラのURLを指定する文字列。この文字列には、処理するドキュメントのエスケープ済みURLで置換されるプレースホルダ "%s" を含めなければなりません。プレースホルダを置換するURLには、いわゆるURLの他に、電話番号、メールアドレスなども含まれます。
注: ハンドラーURLのスキームは "http" もしくは "https" でなければなりません。また、一部のブラウザはセキュリティ上の理由で HTTPS URL であることを求めるため、HTTPS URL を使うべきです。
title
プロトコルハンドラーの名前を指定する文字列。この文字列は必要に応じてインターフェイス上でユーザーに対して表示されます。

例外

SecurityError
ユーザーエージェントがプロトコルハンドラーの登録をブロックした。無効なスキームが指定された場合、例えば "http" が指定されているが、 明白なセキュリティ上の問題があり登録させられない、またはブラウザーがこの関数を安全なコンテキストから呼び出すことを要求している、あるいはハンドラーの URL が HTTPS であることを要求している、といった場合にこの例外が発生します。
SyntaxError
指定されたハンドラー URL に "%s" が含まれていない。

許可されたスキーム

セキュリティ上の理由により registerProtocolHandler() は登録可能なスキームに制限を設けています。カスタムスキームの場合、"web+" で始まり、"web+" を含め5文字以上であり、小文字の ASCII 文字のみで構成されているものが登録可能です。例えば下の で使われている "web+burger" などが挙げられます。

もしくは、以下のホワイトリストに挙げられているスキームでなければなりません:

  • bitcoin
  • geo
  • im
  • irc
  • ircs
  • magnet
  • mailto
  • mms
  • news
  • nntp
  • sip
  • sms
  • smsto
  • ssh
  • tel
  • urn
  • webcal
  • wtai
  • xmpp

ウェブアプリケーションが http://burgers.example.com にある場合、次のようにして "web+burger" リンクを処理するプロトコルハンドラーを登録できます:

navigator.registerProtocolHandler("web+burger",
                                  "https://burgers.example.com/?burger=%s",
                                  "Burger handler");

このようにハンドラーを登録することで、web+burger:// リンクを通してユーザーをあなたのウェブアプリケーションに移動させることができます。リンクに含まれていたハンバーガーの情報はURLへ埋め込む形で渡されます。このスクリプトは同じドメイン (ここでは burgers.example.com 内のページ) で実行されなければならず、第 2 引数のスキームは http と https のどちらか (ここでは https) でなければならないことを思い出してください。

あなたのコードがプロトコルハンドラーを登録しようとしていることはユーザーに通知され、ユーザーは登録を許可するかどうか決めることができます。以下のスクリーンショットは google.co.uk での例です。

仕様

仕様書 策定状況 コメント
HTML Living Standard
registerProtocolHandler() の定義
現行の標準 初期定義

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOS 版 SafariSamsung Internet
基本対応Chrome 完全対応 13
補足
完全対応 13
補足
補足 Protocol whitelist includes mailto, mms, nntp, rtsp, and webcal. Custom protocols must be prefixed with web+.
Edge ? Firefox 完全対応 3IE ? Opera 完全対応 11.6Safari ? WebView Android ? Chrome Android ? Edge Mobile ? Firefox Android 完全対応 4Opera Android ? Safari iOS 未対応 なしSamsung Internet Android ?
Secure context required (HTTPS)Chrome ? Edge ? Firefox 完全対応 62IE ? Opera ? Safari ? WebView Android ? Chrome Android ? Edge Mobile ? Firefox Android 完全対応 62Opera Android ? Safari iOS ? Samsung Internet Android ?

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明
実装ノートを参照してください。
実装ノートを参照してください。

関連情報

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

このページの貢献者: unarist, hamasaki, fscholz, khalid32, Potappo, drry, Mgjbot, Norah
最終更新者: unarist,