Navigator: registerProtocolHandler() 方法
Navigator 介面的 registerProtocolHandler() 方法允許網站註冊它們處理特定 URL 方案(也稱為協議)的能力,以開啟或響應這些連結。
例如,此 API 允許網頁郵件站點處理 mailto: URL,或 VoIP 站點處理 tel: URL。
要註冊一個協議處理器,網站會呼叫 registerProtocolHandler(),傳入要註冊的協議和一個 URL 模板。
當用戶啟用使用已註冊協議的連結時,瀏覽器會將已啟用連結的 href 插入到處理程式註冊期間提供的 URL 模板中,並導航當前頁面到生成的 URL。
瀏覽器可能會詢問使用者是否允許該頁面處理該協議,無論是註冊協議時還是使用者啟用連結時。
語法
registerProtocolHandler(scheme, url)
引數
scheme-
一個包含網站希望處理的協議方案的字串。
這可能是一個自定義方案,在這種情況下,方案名稱
- 以
web+開頭 - 在
web+字首後至少包含一個字母 - 僅包含小寫 ASCII 字母。
否則,該方案必須是以下之一
bitcoinftpftpsgeoimircircsmagnetmailtomatrixmmsnewsnntpopenpgp4fprsftpsipsmssmstossh電話urnwebcalwtaixmpp
- 以
url-
一個包含處理程式 URL 的字串。此 URL 必須包含
%s,它將作為佔位符,替換為要處理的經過轉義的 URL。處理程式 URL 必須使用
https方案,並且必須與嘗試註冊處理程式的網頁具有相同的源。
返回值
無(undefined)。
異常
SecurityErrorDOMException-
使用者代理阻止了註冊。這可能發生在以下情況:
- 已註冊的方案(協議)無效,例如瀏覽器自身處理的方案(
https:、about:等) - 處理程式 URL 的源與呼叫此 API 的頁面的源不匹配。
- 處理程式的 URL 方案不是
https。
- 已註冊的方案(協議)無效,例如瀏覽器自身處理的方案(
SyntaxErrorDOMException-
處理程式的 URL 中缺少
%s佔位符。
示例
註冊 mailto 協議的處理程式
網頁透過非 https 協議連結到資源的場景很常見。一個例子是 mailto: 協議。當網頁作者希望為使用者提供一種方便的方式直接從網頁傳送電子郵件時,他們可以使用 mailto 連結。
<a href="mailto:webmaster@example.com">Web Master</a>
當連結被啟用時,瀏覽器應該啟動處理電子郵件的預設桌面應用程式。您可以將其視為一個*基於桌面*的協議處理程式。
基於 Web 的協議處理程式也允許基於 Web 的應用程式參與此過程。位於 mail.example.org 的電子郵件 Web 應用可以透過以下程式碼註冊來處理 mailto 連結:
navigator.registerProtocolHandler("mailto", "https://mail.example.org/?to=%s");
此後,當用戶在任何網站上點選 mailto 連結時,瀏覽器將(在可能詢問使用者確認後)導航到 https://mail.example.org/?to=mailto:webmaster@example.com。該頁面可以解析 URL 引數以提取地址,並使用此地址來初始化一封電子郵件。
註冊自定義協議的處理程式
在此示例中,一個頁面透過以下程式碼註冊了一個 web+burger 協議的處理程式:
navigator.registerProtocolHandler(
"web+burger",
"https://burgers.example.org/?burger=%s",
);
之後,使用者訪問包含類似以下連結的頁面:
<a href="web+burger:cheeseburger">cheeseburger</a>
如果使用者啟用 web+burger 連結,瀏覽器將(在可能詢問使用者確認後)導航到 https://burgers.example.org/?burger=web+burger:cheeseburger。
規範
| 規範 |
|---|
| HTML # custom-handlers |
瀏覽器相容性
載入中…