2017-10-04 55 views
0

執行以下在控制檯代碼Notification.requestPermission()。然後()總返回無極對象,而不是解決拒絕在控制檯值

Notification.requestPermission(function(status) { 
    console.log('Notification permission status:', status); 
}); 
在Chrome

v 61

返回

Notification permission status: "granted"

如果已經給出,否則彈出窗口出現在左側帶有允許和阻止選項的地址欄。

儘管經過多次嘗試,Chrome也停止顯示彈出窗口,並在控制檯中向用戶提供信息。

並返回

Notification permission status: "denied" 

與消息

通知許可已被阻止的用戶已駁回 提示幾次的權限。有關更多 的信息,請參閱 https://www.chromestatus.com/features/6443143280984064

在Firefox開發版

v 57

回報承諾對象,如下

Promise { <state>: "pending" } 

爲什麼我沒有得到控制檯消息也不認爲會出現彈出。

所以我的問題是我需要在Firefox配置的東西嗎?

或者我缺乏一些東西。

注意:我已經嘗試了MDN上建議的requestPermission函數的兩種變體。

+0

您可以參考此[線索](https://bugs.chromium.org/p/chromium/issues/detail?id=704771)。清除瀏覽數據將清除該塊。這裏有一個額外的[論壇](https://github.com/firebase/quickstart-js/issues/115),這可能也有幫助。 – abielita

+0

我想知道爲什麼firefox不會在Chrome瀏覽器中彈出通知彈出窗口。 –

回答

1

承諾和回調是異步執行的。如果Firefox是將來會執行console.log的承諾的臨時返回值,那麼在運行時會看到什麼。但console.log尚未執行。

>> Notification.requestPermission().then(function(permission) { console.log(permission); }); 
← Promise { <state>: "pending" } 

基本上你看到的是按預期工作。它類似於做這樣的事情:

>> let thing = Notification.requestPermission().then(function(permission) { console.log(permission); }); 
    console.log(thing); 
Promise { <state>: "pending" } 
← undefined 
granted 

console.log(thing)正在記錄工作,在未來,但權限授予會發生的承諾和console.log(permission)尚未執行。

此外Notification.requestPermission(callback);格式已被棄用,不應使用。

相關問題