【问题标题】:Chrome App pushMessaging does not work when background page is inactive当后台页面处于非活动状态时,Chrome App pushMessaging 不起作用
【发布时间】:2013-11-18 10:49:05
【问题描述】:

manifest.json:

{
   "app": {
      "background": {
         "scripts": [ "background.js" ]
      }
   },
   "key": "...",
   "manifest_version": 2,
   "name": "Push Sample",
   "permissions": [ "notifications", "pushMessaging" ],
   "version": "1.0"
}

background.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 的 Extensions 页面上,一行:

Inspect views: background page

更改为:

Inspect views: background page (Inactive)

当发送消息时,该行更改为活动状态(“背景页面”,没有“(非活动)”部分,表示在某种意义上已收到消息。但是,通知代码不会产生在弹出窗口中。

我无法确定日志记录出了什么问题,因为当 JavaScript 控制台打开时,应用程序保持活动状态,然后可以运行。

问题:根据扩展页面上的状态指示,当消息到达时,我的应用程序似乎被唤醒,但它无法正常工作。有人知道为什么吗?

BUG 归档:进行了更多测试,包括 Chrome 的稳定(非测试版)版本。在 OS X、Chrome OS 和 Windows 上试过。一样。这是我提交的问题:https://code.google.com/p/chromium/issues/detail?id=316315

【问题讨论】:

  • 你做了什么来修复它?我遇到了同样的问题,我在每次页面加载时都注册了监听器,但我无法接收推送消息(后台页面确实变为活动状态)。
  • 没有收到推送消息可能有各种原因,因为向应用程序发送推送消息需要很多事情都完全正确,包括 manifest.json 文件中的 client_id 等等。太复杂了,放在这里。我的问题只是该事件没有得到倾听。换句话说,在解决应用程序的问题之前,有必要知道消息确实到达了计算机并且所有参数都正常。抱歉,我无法提供更多帮助,但推送消息的整理非常复杂。
  • 我可以向您保证,GCM 工作正常。我目前使用“正常”背景页面。一切都已到位并按预期工作。我只是想切换到活动页面。当事件页面加载时,我为 chrome.pushMessaging.onMessage 添加了一个监听器,但不知何故,监听器方法永远不会被调用。不过感谢您的回复!

标签: google-chrome-app google-cloud-messaging chrome-gcm


【解决方案1】:

听起来像一个错误,在http://crbug.com/net 提交一个文件并包含示例代码。更新问题以链接到问题,以便其他人可以对其加注星标以跟踪状态。

【讨论】:

  • 不是错误...见下文。
【解决方案2】:

我误解了事件监听的工作原理。这是信息:

https://developer.chrome.com/apps/event_pages.html#registration

“因为监听器本身只存在于事件页面的上下文中,所以每次事件页面加载时都必须使用addListener;仅在runtime.onInstalled时自己使用是不够的。”

在对我提交的问题的评论中向我指出。现在一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-02
    • 2011-08-21
    • 1970-01-01
    • 2020-01-26
    相关资源
    最近更新 更多