網頁適用的 Permissions API

Matt Gaunt

如果您已使用 Geolocation API 您可能想檢查自己是否有權使用 不觸發提示的地理位置。不過這是不可能的。您必須要求目前的位置,這可以表示權限狀態或導致使用者看見提示。

並非所有 API 都以這種方式運作。通知 API 會以一種方式 供您透過 Notification.permission

隨著 API 的網路平台不斷發展,您必須讓 開發人員可以檢查權限狀態,而不必記住 以及各 API 的運作方式Chrome 43 版提供的 Permission API 是 是用來檢查 API 權限狀態的單一標準方式。

permissions.query()

使用 permissions.query() 方法檢查權限狀態。這將 傳回狀態:授予 (您擁有權限)、拒絕 (您遭到封鎖, 存取 API) 或 提示 (使用者需求 。例如:

// Check for Geolocation API permissions
navigator.permissions.query({name:'geolocation'})
    .then(function(permissionStatus) {
    console.log('geolocation permission state is ', permissionStatus.state);

    permissionStatus.onchange = function() {
        console.log('geolocation permission state has changed to ', this.state);
    };
    });

查詢方法會使用 PermissionDescriptor 物件,定義權限的名稱。回覆是 Promise 解析為 PermissionStatus 物件。您可以透過這個物件使用 permissionStatus.state 檢查狀態 針對「granted」、「denied」或「提示」您也可以導入 permissionStatus.onchange 的處理常式,並處理權限變更 時間。

支援的 PermissionDescriptors

在上述範例中,我們會重點說明如何查詢 包含下列權限描述元的地理位置:{name:'geolocation'}

「通知」權限描述元的類似,同樣只需要 名稱屬性:{name:'notifications'}

推送並 每個 midi 都提供額外的 專屬參數

針對推送權限,您可以提供 userVisibleOnly 參數。 這表示是否要在每則推送訊息中顯示通知 能否傳送靜音推播通知 (目前只支援 Chrome 瀏覽器) 支援推送訊息和通知)。操作方式如下:

navigator.permissions.query({name:'push', userVisibleOnly:true})

Midi 允許使用 sysex 參數。這代表您需要和/或 系統專屬訊息以中位數來說,這會是:

navigator.permissions.query({name:'midi', sysex:true})

要求權限

向使用者要求權限的方式會因特定的 API 而異。例如: 呼叫 getCurrentPosition() 時,地理位置會顯示權限提示。

navigator.geolocation.getCurrentPosition(function(position) {
    console.log('Geolocation permissions granted');
    console.log('Latitude:' + position.coords.latitude);
    console.log('Longitude:' + position.coords.longitude);
});

而當您呼叫 requestPermission() 時,通知則會提示使用者。

Notification.requestPermission(function(result) {
    if (result === 'denied') {
    console.log('Permission wasn\'t granted. Allow a retry.');
    return;
    } else if (result === 'default') {
    console.log('The permission request was dismissed.');
    return;
    }
    console.log('Permission was granted for notifications');
});

這裡的重點在於 Permission API 能以一致的方式監控 權限狀態,同時能夠支援目前支援的 API 範圍 在網路上。

這麼做的一大優點是可以協助開發人員 只在使用者清楚瞭解需要額外項目的情況下提供提示 並充分運用這些 API 已授予相關權限。

請前往這個頁面查看完整範例。

瀏覽器支援

Chrome 是第一個實作此工具的瀏覽器,Mozilla 正規劃運送服務 Microsoft 也已表示對 API 感興趣。

已知問題

  • 如果使用者關閉權限,地理位置資訊不會再次顯示提示 請求。不過,權限狀態仍會是「提示」。 [bugs.chromium.org]