使用Chrome扩展录制/捕获推送通知 [英] Recording/Catching push notifications with chrome extension

查看:22
本文介绍了使用Chrome扩展录制/捕获推送通知的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试捕获发送到我的Chrome扩展名为Chrome的浏览器的推送通知,然后将其写入文件或在接收到它时运行代码。 我相信我遇到的问题对于你们中的一些人来说已经足够简单了,所以我将分享我到目前为止所发现的和我的代码。

notfhook.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;
    }
})()

清单.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
}

注入.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/

因此,据我所知,到目前为止,包含我的Main函数的块正在被添加到网页中 因为我可以在它开始时发出警报,并且在每次页面加载时都会触发它。

失败的是,当我收到推送通知时,事件侦听器不工作或我的函数名错误。我在某个地方读到,WebkitNotiments被仅替换为‘Notify’。

如有任何帮助,我们不胜感激。

推荐答案

如果代码在服务工作者中,例如当您关闭应用程序的浏览器选项卡/窗口时(如在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)});
      });
    };
  }
})();

在服务Worker(您的脚本.js)中,您需要使用POST消息中的原始脚本调用导入脚本

// 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);
  }
});

这篇关于使用Chrome扩展录制/捕获推送通知的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆