0

Google push-sample-app codeをダウンロードし、マニフェストからキーを削除し、アプリを Chrome Web ストアにアップロードしてから、Web ストアから Chrome にインストールしました。

chrome ://extensions/は、アプリを「有効」としてリストし、「ビューの検査: バックグラウンド ページ (非アクティブ)」を表示します。Chrome タスク マネージャーは、現在実行中のアプリを一覧表示しません。

chrome://extensions/タブで、「Push Messaging Sample」アプリの「background page (Inactive)」リンクをクリックすると、検査ビューが別の Chrome ウィンドウに表示され、Chrome タスク マネージャーに新しいエントリが表示されます : "背景ページ: プッシュ メッセージのサンプル". インスペクト ビュー Chrome ウィンドウが開いている限り、イベント ページ「background.js」はオフロードされません。メッセージがプッシュ メッセージング サービスに送信されると、メッセージ テキストを含むポップアップ ウィンドウが表示されます。

インスペクト ビューの Chrome ウィンドウを閉じて、プッシュ メッセージング サービスにメッセージを送信すると、Chrome タスク マネージャーは、イベント ページ「background.js」がロードされ、数秒でオフロードされ、タスク マネージャーから消えることを示します。ただし、メッセージを含むポップアップ ウィンドウは表示されません。

追加の Chrome ウィンドウを実行せずにポップアップ メッセージを表示するには、このアプリをどのように変更する必要がありますか?

4

2 に答える 2

3

バックグラウンド ページが起動されたときに、chrome.pushMessaging.onMessage のイベント ハンドラが設定されていないため、サンプル アプリは「バックグラウンド ページが非アクティブ」状態からの通知を表示しません。

ユーザーがアイコンをクリックしてアプリを起動すると、chrome.app.runtime.onLaunched() イベントが発生します。しかし、なんらかの受信イベント (プッシュ メッセージやアラームなど) によってバックグラウンド ページがアクティブ化されると、onLaunched は起動されません。代わりに、「初期スクリプト」、つまり関数の外部にある JS コードのみが実行されます。バックグラウンド ページの初期スクリプトは、イベント リスナーを登録する必要があります。これにより、Chrome は初期ロード後に呼び出すハンドラーを認識します。サンプル アプリは onLaunched に onMessage ハンドラーを登録するだけで、初期スクリプトからは登録しません。

サンプル アプリを「修正」するのは簡単です。setupPush() の呼び出しを onLaunched() ハンドラから background.js ファイルの最後に移動するだけです。

background.js:

....
// When a Push Message arrives, show it as a text notification (toast)
function showPushMessage(payload, subChannel) {
  var notification = window.webkitNotifications.createNotification(
      'icon.png', 'Push Message',
      "Push message for you! " +
      payload +" [" + subChannel + "]");
  notification.show();
}

setupPush();  // <-- this executes every time page loads, not only in onLaunched

これにより、バックグラウンド ページがアクティブ化されるたびに setupPush() が実行されます。これは、ユーザーがアプリを起動したか、プッシュ メッセージの受信に応答してアプリがバックグラウンドで開始されたかに関係ありません。

于 2014-04-18T20:00:12.460 に答える
1

この質問/回答は、何が欠けているかを説明しました:

「リスナー自体はイベント ページのコンテキストにのみ存在するため、イベント ページが読み込まれるたびに addListener を使用する必要があります。runtime.onInstalled でのみ行うだけでは不十分です。」

push-sample-appを修正するには、 background.jsに追加するだけです:

// Register with the Push Messaging system for the Push Message.
chrome.pushMessaging.onMessage.addListener(messageCallback);
于 2014-04-18T18:31:40.090 に答える