1

バックグラウンド プロセスで通知を使用する方法を見つけようとしてきましたが、それについてオンラインで見つけることができませんでした。それで、私はそれを回避する1つの方法を考え出し、共有したいと思いました(これがこれを行うための最良の方法であるかどうかはわかりませんが、ここに行きます:)

問題:ページがバックグラウンドで実行されている (ぼやけている) ときに、ユーザーに新しい情報を通知したい。タスクバーのアイコンを点滅させるために使用できalert('new info!');ますが、手動で閉じる必要があります (試してみましたが、非常に面倒です)。通知はとても気に入りましたが、ユーザーがアクションを実行した場合にのみ機能するため、役に立ちません...

4

2 に答える 2

0

私の解決策:バックグラウンドで実行され、通知をトリガーする chrome 拡張機能を作成しました。それを行うにはクロムが必要なため、範囲が少し制限されていますが、必要なことは実行します。私が取り組んでいる問題の目的のために、ユーザーグループにクロムを使用させることができます;D

詳細: 拡張機能には、マニフェストとスクリプトの 2 つのコンポーネントしかありません。現在、一致識別子を使用して自分のサイトでのみ機能するようにマニフェストをセットアップしています...そして、通知を含めるように権限を設定しています。

JS スクリプトには、ページ内で id を持つ要素を探す window.setinterval がありますNOTIFIER。空の場合は何もしません。それ以外の場合は、コンテンツに基づいて通知を作成し、コンテンツをクリアして、同じ通知が複数回表示されないようにします...(.onchangeその要素に使用しようとしましたが、イベントをトリガーできませんでした... setInterval ではなくイベントでこれを行うことをお勧めします)

Notify.js

function onExtLoad() {
  var timer = setInterval(refresh,1000);
}

document.addEventListener('DOMContentLoaded', onExtLoad());

function refresh() {
if (document.getElementById('NOTIFIER').innerHTML == "") {
    //do nothing?
} else {
    var notification = webkitNotifications.createNotification("",
        "You got a new message",
        document.getElementById('NOTIFIER').innerHTML);
    notification.show();
    document.getElementById('NOTIFIER').innerHTML = "";
}

}

次に、NOTIFIER と出来上がりに情報を追加するときに、ページ コントロールに JS を配置するだけです。通知!

これが他の誰かに役立つことを願っています。

@ExpertSystem: MutationObserver をいじりましたが、一度しかトリガーできません。 ここにJSFiddle があります: http://jsfiddle.net/BTX8x/1/ リセットする方法はありますか?

編集: それを理解しました、私は必要でしたsubtree:true

于 2013-11-28T13:24:48.193 に答える
0

ばかげたことを言わないことを願っていますが、私が見たところ (そして学校で覚えていること) から見ると、基本的に http のしくみは次のとおりです。リクエストがサーバーに送信され、サーバー側のコードを実行した後、最終的に応答が発行されます。基本的に、サーバーからクライアントへの「PUSH」機能を要求しています。その場合、HTTP を利用することはできません。この制限を回避するためのいくつかのトリックが存在しますが、基本的にはすべて特定の頻度でリクエストを発行しています (Dave の回答はまさにそれです)。サイトがあまり変わらない場合、理由もなく (何も変わっていない) 大量のリクエストが発行され、無駄に帯域幅を消費していることを意味します。

私の知る限り、これに対する答えは Websockets と呼ばれ、最近のブラウザーでのみサポートされています。私はそれを使用する機会がなかったので、私はそれについてもっと多くを語ることはできませんでした. これにより、全二重通信が可能になり、サーバーがクライアントにデータを「プッシュ」できるようになります。それがSOが「新しいメッセージ」通知に使用するものだと思います(画面の左上-新しいメッセージを受信するとすぐに表示されます)

于 2013-11-28T13:39:59.280 に答える