如果您已使用 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'}
。
針對推送權限,您可以提供 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]