### 全体のやりたいこと

サイト内の通知でフィッシングサイトに遷移してしまうのを抑制するために、サイト内でServiceWorkerのpush
Notificationを用いた通知が検知された場合は、遷移先のurlを取得して、ブラックリスト(.json)と照合して一致した際は通知の処理をオーバーライド、不一致の際はそのまま表示させたい。

### 質問したいこと

・ブラウザ拡張でService Workerを利用した通知のtitle, bodyと遷移先のurlを取得したい

１．ブラウザ拡張から制御できる要素は，Web サイトの表示に用いられる HTMLや JavaScript のみであり，別スレッドで動作するService
Workerの動作は制御できないが、Service Workerを利用した通知であってもServiceWorker
オブジェクトの生成をブラウザ拡張で検知できれば通知を検知できるので、後者側のブラウザ側で実装されている場合はブラウザ拡張で制御したい。

２．`navigator.serviceWorker.getRegistrations()`によりServiceWorkerオブジェクトを取得できる場合は，showNotification
メソッドをブラウザ拡張で用意したものにオーバライドするようにしたい。

３．画像のAは実装済みで今回はBの(1),(2)を実装したい。  
[![画像の説明をここに入力](https://i.stack.imgur.com/rT3UI.png)](https://i.stack.imgur.com/rT3UI.png)

manifest.json

```

    {
      "name": "Blocking phishing sites",
      "description": "Control method for web push notification by browser extension",
      "version": "1.0",
      "manifest_version": 2,
      "web_accessible_resources": ["js/content.js"],
      "content_scripts": [
        {
          "matches": ["<all_urls>"],
          "run_at": "document_start",
          "js": ["js/inject.js"]
        }
      ],
      "permissions": [
        "*://*/*",
        "tabs",
        "webRequest",
        "webRequestBlocking",
        "webNavigation"
      ]
    }
    
```

content.js

```

    //A
    Notification = (function(Notification) {
      function MyNotification(...args) {
        console.log("title: ", args[0]);
        console.log("body: ", args[1].body);
        console.log("icon: ", args[1].icon);
    
        if (args[0] === "ブラックリストのキーワード") {
          return null;
        } else {
          return new Notification(...args);
        }
      
      };
      Object.assign(MyNotification, Notification);
      MyNotification.prototype = Notification.prototype;
      return MyNotification;
    })(Notification);
    
    window.open = function (open) {
      return function (url, name, features) {
        console.log("url: ", url);
    
        if (url === "ブラックリストのURL") {
          return null;
        } else {
          return open.call(window, url, name, features);
        }
    
      };
    }(window.open);
    
    //B
    navigator.serviceWorker.getRegistrations().then(function(registrations) {
      document.querySelector('#status').textContent = 'ServiceWorkerRegistrations が見つかりました。';
    });
    
    
```

お時間のある時にご回答いただければ幸いです。
CC BY-SA 4.0
2022-11-13T09:57:07.457
92205
2022-11-13T12:51:21.940
2022-11-13T12:51:21.940
55256
55256
question
javascript google-chrome chrome-extension push-notification
ブラウザ拡張でServiceWorkerのpush Notificationを取得したい