2013-12-22 102 views
2

我在生產中有一個Google Chrome擴展。該程序的一部分通過chrome.notifications API顯示通知。我開始顯示此邏輯的通知:chrome.notifications undefined間歇性地

// Expects options: { iconUrl: string, title: string, message: string } 
showNotification: function (options) { 

    // TODO: Future version of Google Chrome will support permission levels on notifications. 
    if (chrome.notifications.getPermissionLevel) { 
     chrome.notifications.getPermissionLevel(function (permissionLevel) { 
      if (permissionLevel === 'granted') { 
       doShowNotification(options); 
      } 
     }); 
    } else { 
     doShowNotification(options); 
    } 

} 

此邏輯工作正常。 getPermissionLevel函數尚未實現,但將在未來實現。所以,我檢查一下是否已經實施,如果沒有,只是顯示通知。

我在某些客戶端看到錯誤。該錯誤消息指出chrome.notifications上以下行未定義:

if (chrome.notifications.getPermissionLevel) { 

與錯誤消息:

Uncaught TypeError: Cannot read property 'getPermissionLevel' of undefined

這很奇怪,因爲此代碼的工作對我來說完全沒有問題,我的測試用例通過,等等。另外,我在我的manifest.json以下規則:

"minimum_chrome_version": "29.0.1547.76" 

這應該強制所有客戶端使用一個版本的谷歌瀏覽器的支持通知。根據該文件,http://developer.chrome.com/extensions/notifications.html,通知在Chrome 28穩定去:

Availability: Stable since Chrome 28.

另外,我有以下權限聲明:

"permissions": [ 
    "contextMenus", 
    "management", 
    "notifications", 
    "storage", 
    "identity", 
    "webRequest", 
    "webRequestBlocking" 
] 

我請求通知特權和我確保用戶正在使用當前的瀏覽器版本。

有沒有人知道任何其他原因chrome.notifications將被定義?我知道我可以簡單地確保它被定義,但我想知道發生了什麼。謝謝。

回答

2

我能想到的唯一原因是API在Linux中不受支持。

根據the docs

Note: This API is currently available on ChromeOS, Windows, and Mac.

我還沒有嘗試過了最新的版本,但我知道那裏有與以前版本的Chrome在Linux上的問題(例如沒有按鍵,其中顯示等)。

我不確定它目前是否會以不同的方式影響不同的分配。無論如何,檢查發生故障的客戶端的Chrome版本和操作系統是一個好主意。

+1

這聽起來非常合理。謝謝。我會在今天進行調查,一旦我確認我會接受評論。 –