manifest.json:
{
"app": {
"background": {
"scripts": [ "background.js" ]
}
},
"key": "...",
"manifest_version": 2,
"name": "Push Sample",
"permissions": [ "notifications", "pushMessaging" ],
"version": "1.0"
}
背景.js:
chrome.runtime.onInstalled.addListener(
function() {
chrome.pushMessaging.onMessage.addListener(
function (message) {
chrome.notifications.create(
'',
{
type: 'basic',
iconUrl: 'icon24.png',
title: 'The Title',
message: message.payload
},
function (notificationID) {
}
);
}
);
}
);
这是整个应用程序。没有HTML页面(没有创建窗口),也没有其他JavaScript。
当后台页面处于活动状态时,应用程序工作正常,我看到屏幕右上角弹出的通知消息。(未显示的是我临时使用的一些代码,用于向我显示我的服务器使用的通道 ID。该服务器是一个PHP程序,使用Google Cloud Messaging for Chrome服务。好像没问题。
但是,如果我在几秒钟内什么都不做,应用程序将变为非活动状态。在 Chrome 的"扩展程序"页面上,有以下行:
Inspect views: background page
更改为:
Inspect views: background page (Inactive)
当发送消息时,该行将变为活动状态("后台页面",没有"(非活动)"部分,表示消息在某种意义上已被接收。但是,通知代码不会导致弹出窗口。
我无法确定日志记录出了什么问题,因为当打开 JavaScript 控制台时,应用程序会保持活动状态,然后工作。
问:根据"扩展"页面上的状态指示,我的应用似乎在消息到达时被唤醒,但它无法正常工作。有人知道为什么吗?
错误归档:进行了更多的测试,包括使用稳定(非测试版)版本的Chrome。在OS X,Chrome OS和Windows上试用。同样的事情。这是我提出的问题:https://code.google.com/p/chromium/issues/detail?id=316315
听起来像一个错误,在 http://crbug.com/net 提交一个并包含示例代码。更新问题以链接到问题,以便其他人可以为其加星标以跟踪状态。
我误解了事件监听的工作原理。以下是信息:
https://developer.chrome.com/apps/event_pages.html#registration
"由于侦听器本身仅存在于事件页面的上下文中,因此每次加载事件页面时都必须使用 addListener;仅在runtime.on安装本身这样做是不够的。
在对我提出的问题的评论中向我指出。现在一切正常。