0

クロム拡張機能を使用してクロムブラウザに送信されたプッシュ通知をキャッチして、ファイルに書き込むか、受信時にコードを実行しようとしています。 私が抱えている問題は、あなたの中にはまだまだ単純ですので、私がこれまでに見つけたものと私のコードを共有します。クロム拡張子付きのプッシュ通知の録音/キャッチ

notifhook.js

(function() { 
    // save the original function 
    var origCreateNotif = notifications.createNotification; 

    // overwrite createNotification with a new function 
    notifications.createNotification = function(img, title, body) { 

     // call the original notification function 
     var result = origCreateNotif.apply(this, arguments); 

     alert("Function was called"); 

     // bind a listener for when the notification is displayed 
     result.addEventListener("display", function() { 
      alert("Triggered code"); 
      // do something when the notification is displayed 
     }); 

     return result; 
    } 
})() 

manifest.jsonを

{ 
    "name": "Push", 
    "description": "Relay push notifications", 
    "version": "3.0", 
    "permissions": ["notifications"], 
    "web_accessible_resources": ["notifhook.js"], 
    "content_scripts" : [{ 
    "run_at" : "document_start", 
    "matches" : ["<all_urls>"], 
    "js" : ["inject.js"] 
    }], 
    "manifest_version": 2 
} 

inject.js

var s = document.createElement("script"); 
s.src = chrome.extension.getURL("notifhook.js"); 
document.documentElement.appendChild(s); 

使用されるコードのほとんどは、ここで撮影された: How can I listen to notifications?

は、私は私の拡張機能をテストするには、このWebアプリケーションを使用しています: http://ttsvetko.github.io/HTML5-Desktop-Notifications/

だから、私の知識にどのようなこれまでに起こっている私の主な機能を含むブロックは、私が警告することができるので うまくWebページに追加されていることですそれの開始とすべてのページの読み込みにトリガされます。

何がうまくいかないのは、イベントリスナーが機能していないか、関数名が間違っているというプッシュ通知を受け取った場合です。私はwebkitNotificationsが単に「通知」に置き換えられた場所を読んでいます。

ご迷惑をおかけして申し訳ありません。

+0

から取られたオリジナルのスクリプトでimportScriptを呼び出す必要があり、通知の火を押していますか?プッシュ通知がservis workerで実行され、スクリプトが起動しない場合は、サービスワーカーの登録をスクリプトで上書きし、オリジナルのimportScriptを呼び出す必要があります。 – jcubic

+0

クロームが開いている限り、私は通知を受け取ります。 どのように登録を上書きしようとしますか? – LAZ

+0

オープンで私はブラウザではないページを意味します。ブラウザのタブ(facebookのような)を閉じている間に通知を受けると、通知はサービスワーカーから来たものです。 – jcubic

答えて

0

コードがサービスワーカーにある場合、アプリのブラウザタブ/ウィンドウ(Facebookなど)を閉じるときに通知がある場合のように、サービスワーカーの登録をオーバーワイルにする必要があります。ウェブアプリを閉じたときに

// taken from https://googlechrome.github.io/samples/service-worker/post-message/index.html 
function sendMessage(message) { 
    return new Promise(function(resolve, reject) { 
    var messageChannel = new MessageChannel(); 
    messageChannel.port1.onmessage = function(event) { 
     if (event.data.error) { 
     reject(event.data.error); 
     } else { 
     resolve(event.data); 
     } 
    }; 
    navigator.serviceWorker.controller.postMessage(message, 
     [messageChannel.port2]); 
    }); 
} 

(function() { 
    if ('serviceWorker' in navigator) { 
    var register = navigator.serviceWorker.register; 
    navigator.serviceWorker.register = function() { 
     register.call(navigator.serviceWorker, "yourscript.js").then(function() { 
     sendMessage({args: [].slice.call(arguments)}); 
     }); 
    }; 
    } 
})(); 

とサービスワーカー(yourscript.js)であなたがポストメッセージ

// put content of notifhook.js file here 
self.addEventListener('message', function handler(event) { 
    if (event.data && event.data.args && event.data.args.length) { 
    importScripts(event.data.args[0]); // import original script 
    self.removeEventListener('message', handler); 
    } 
}); 
関連する問題