Web Permissions API

這是一個正在研發(fā)中的API,由于這個API的相關(guān)規(guī)范并不穩(wěn)定,各個瀏覽器的支持程度都不一樣(應(yīng)該是大部分瀏覽器都不支持),但這又是一個非常有意思的東西拙友,所以我決定把它分享出來。

Per missions API 的接口提供了一些它的一些核心的方法歼郭,比如查詢(query)或者撤銷(revoke)權(quán)限遗契。

API 方法

Permissions.query() 查詢給定API的權(quán)限狀態(tài),并返回狀態(tài)

Permissions.request() 請求一個給定API的權(quán)限病曾。

Permissions.revoke() 撤銷某個API的權(quán)限

基本概念搞清楚了牍蜂,接下來就該使用這個有意思的東西了。

如果你的程序想運行了一個Geolocation API(獲取地理位置的API)泰涂,正巧你想檢測一下你是否能在不彈出授權(quán)提示的情況下使用這個API鲫竞。這簡直是不可能的事情,你必須先請求當(dāng)前位置逼蒙,這樣才能表明你的權(quán)限狀態(tài)从绘,或者是彈出一個用戶授權(quán)框。當(dāng)然并不是所有的API都是這樣的是牢,比如Notification API(一個為用戶設(shè)置顯示桌面通知的API)就自己提供了一個自己的方法來獲取權(quán)限狀態(tài)Notification.permission僵井。

但是這樣不是太麻煩了么,網(wǎng)絡(luò)平臺的成長與API息息相關(guān)驳棱,我們應(yīng)用一個統(tǒng)一的批什、標(biāo)準(zhǔn)的、符合一致規(guī)范的方法來檢測 API 的權(quán)限社搅。這就是Permissions API驻债。

Permissions.query()

使用Permissions.query() 方法檢測某個權(quán)限的狀態(tài)罵,并返回一個狀態(tài):“許可(granted)”罚渐、“拒絕(denied)”却汉、“需要授權(quán)(prompt)”驯妄。例如:

//  檢測Geolocation API 的權(quán)限狀態(tài)
navigator.permissions.query({name: 'geolocation'}).then(function(result){
  console.log('geolocation permission status is ', result.state);
  result.status.onchange = function() {
    console.log('geolocation permisssion status has changed to ', this.state);
  };
});

查詢方法接受一個 PermissionDescriptor 對象作為參數(shù)荷并, 在這個對象里面可以定義自己的權(quán)限名字。返回值 Response 是一個 Promise解析到一個 PermissionStatus對象青扔,在這個PermissionStatus對象里你可以通過他的 state 屬性獲取到權(quán)限狀態(tài)源织,也可以通過這個對象提供的onchange方法監(jiān)聽API權(quán)限狀態(tài)的改變。

peimissionDescriptor 的name屬性提供了四個值如下:


permission.png

可以通過實例代碼 {name: 'geolocation'} 的形式傳入微猖,除此之外當(dāng)name的值為 ‘push’ 或者 ‘midi’ 的時候擴展了另外兩個參數(shù)谈息,如下:


midi.png

Requesting Permissions

Requesting Permisssions的方法依賴于用戶請求的特定的API,例如geolocation在調(diào)用它的 getCurrentPosition() 方法的時候?qū)崾菊埱笫跈?quán)凛剥。

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

然而當(dāng)對于notification API 調(diào)用requestPermission() 方法的時候回彈出授權(quán)請求侠仇。

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');
});

最關(guān)鍵的一點是,Permission API 允許以一個一致的方式來監(jiān)控權(quán)限狀態(tài),同時目前能支持

這帶來的最大的好處就是你能夠為你的用戶建立更好的體驗逻炊,只有當(dāng)用戶清楚為什么需要額外授權(quán)的時候才會彈出授權(quán)提示互亮,并且當(dāng)你已經(jīng)獲取到權(quán)限的時候,你可以更充分的余素,更好的利用這些 已授權(quán)API 豹休。

瀏覽器支持

在前面我已經(jīng)提到過,這是一個正在研發(fā)的 API 桨吊,Chrome是第一個支持這個 API 的瀏覽器威根,而事實上只有 Chrome43+ 支持。然而Firefox以及Microsoft都已經(jīng)在準(zhǔn)備支持這個它视乐。

參考或翻譯:

  1. https://developer.mozilla.org/en-US/docs/Web/API/Permissions
  2. https://developers.google.com/web/updates/2015/04/permissions-api-for-the-web
  3. https://w3c.github.io/permissions/

這里有 Google 的實例:
https://googlechrome.github.io/samples/permissions/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洛搀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子炊林,更是在濱河造成了極大的恐慌姥卢,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渣聚,死亡現(xiàn)場離奇詭異独榴,居然都是意外死亡,警方通過查閱死者的電腦和手機奕枝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門棺榔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人隘道,你說我怎么就攤上這事症歇。” “怎么了谭梗?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵忘晤,是天一觀的道長。 經(jīng)常有香客問我激捏,道長设塔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任远舅,我火速辦了婚禮闰蛔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘图柏。我一直安慰自己序六,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布蚤吹。 她就那樣靜靜地躺著例诀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上繁涂,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天暮刃,我揣著相機與錄音,去河邊找鬼爆土。 笑死椭懊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的步势。 我是一名探鬼主播氧猬,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼坏瘩!你這毒婦竟也來了盅抚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后竟坛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡丰包,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了壤巷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邑彪。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖胧华,靈堂內(nèi)的尸體忽然破棺而出寄症,到底是詐尸還是另有隱情,我是刑警寧澤矩动,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布有巧,位于F島的核電站,受9級特大地震影響悲没,放射性物質(zhì)發(fā)生泄漏篮迎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一檀训、第九天 我趴在偏房一處隱蔽的房頂上張望柑潦。 院中可真熱鬧享言,春花似錦峻凫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春命锄,著一層夾襖步出監(jiān)牢的瞬間堰乔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工脐恩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留镐侯,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓驶冒,卻偏偏與公主長得像苟翻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子骗污,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,500評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理崇猫,服務(wù)發(fā)現(xiàn),斷路器需忿,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • Android 是一個特權(quán)分離(privilege-separated)操作系統(tǒng)诅炉,在其中每個應(yīng)用都以一個不同的系統(tǒng)...
    DanieX閱讀 4,088評論 0 3
  • 一、引言 隨著Android6.0發(fā)布屋厘,系統(tǒng)增加了一些新的特性和功能涕烧。這次的發(fā)布介紹了一種新的權(quán)限機制。用戶可以在...
    宇是我閱讀 7,370評論 7 41
  • 淘書時看到了這個——《參考消息》汗洒,一下子想起了爺爺澈魄,和他的小院。 那時候爺爺和奶奶住在老街——現(xiàn)在叫博陵路的一處小...
    輕揚2009閱讀 53評論 0 0