【问题标题】:service worker is not in navigator for chrome-extension服务人员不在 chrome 扩展的导航器中
【发布时间】:2021-08-06 07:21:05
【问题描述】:

我正在使用 ma​​nifest v3 开发 chrome 扩展。我尝试使用以下代码在许多资源中注册服务工作者,我发现

[Service Worker Registration] Registered extension scheme to allow service workers
Service Workers require a secure origin, such as HTTPS. 
chrome-extension:// pages are not HTTP/HTTPS, but are secure so this change 
becomes a necessary step to allow extensions to register a Service Worker.

"chrome-extension" is added as a scheme allowing service workers.

但在使用下面的代码后,service worker 无法正常工作,background.js 文件也因此无法正常工作。

范围网址:

chrome-extension://ifcfmjiflkcjbbddpbeccmkjhhimbphj/trigger/trigger.html

serviceWorker.js

self.addEventListener('load', function () {
    navigator.serviceWorker.register('./background.js').then(function (registration) {
        // Registration was successful
        console.log('ServiceWorker registration successful with scope: ', registration.scope);
    }, function (err) {
        // registration failed :(
        console.log('ServiceWorker registration failed: ', err);
    });
});

self.addEventListener('install', (event) => {
    event.waitUntil(
        caches.open('v1').then((cache) => {
            return cache.addAll([
                
            ]);
        })
    );
});

self.addEventListener('fetch', (event) => {
    event.respondWith(
        caches.match(event.request).then((resp) => {
            return resp || fetch(event.request).then((response) => {
                return caches.open('v1').then((cache) => {
                    // cache.put(event.request, response.clone());
                    return response;
                });
            });
        })
    );
});

self.addEventListener('activate', (event) => {
    var cacheKeeplist = ['v2'];

    event.waitUntil(
        caches.keys().then((keyList) => {
            return Promise.all(keyList.map((key) => {
                if (cacheKeeplist.indexOf(key) === -1) {
                    return caches.delete(key);
                }
            }));
        })
    );
});

ma​​nifest.json

{
  "manifest_version": 3,

  "name": "TestExtension",
  "description": "This extension is for testing purpose only",
  "version": "0.0.1",
  "background":{
    "service_worker":"./serviceWorker.js"
  },
  "declarative_net_request": {
    "rule_resources": [{
      "id": "ruleset_1",
      "enabled": true,
      "path": "rules.json"
    }]
  },  
  "permissions":["storage", "tabs", "activeTab", "scripting", "declarativeNetRequest", "declarativeNetRequestFeedback","browsingData","contextMenus"],  
  "host_permissions":["<all_urls>"],
  "web_accessible_resources": [
    {
      "resources": [ "css/notification.css" ],
      "matches": [ "<all_urls>" ]
    }
  ],
  "content_scripts":[
    {
      "js":["content-scripts/content.js"],
      "matches":["<all_urls>"],
      "all_frames":true,
      "exclude_matches":["*://extensions/*"],
      "run_at":"document_end"
    }
  ],
  "icons":{
    "16":"assets/baby-logo-black-icon.png",
    "48":"assets/baby-logo-black-icon.png",
    "128":"assets/baby-logo-black-icon.png"
  },
  "action":{
    "default_title":"TestExtension",
    "default_popup":"trigger/trigger.html"
  }
}

任何人请帮助我并指导我是否错过了 serviceWorker.js 或 manifest.json 中的任何内容?或对此有任何错误?请帮助我使 serviceWorker.js 和 background.js 工作。

注意:使用上面的代码,我在 serviceWorker.js 上没有收到任何错误,而且它也不起作用。

【问题讨论】:

    标签: javascript google-chrome-extension chrome-extension-manifest-v3


    【解决方案1】:

    无需注册任何东西。
    当您安装扩展程序时,浏览器会自动执行此操作。

    1. 移除注册码和serviceWorker.js。
    2. 在 manifest.json 中使用 "service_worker": "background.js"

    【讨论】:

    • 我遵循了这个,但它给了我一个错误,说 Service Worker 注册失败
    • 表示你的background.js有不相关的问题,见Service worker registration failed. Chrome extension
    • 我确信 background.js 没有问题,因为当 serviceWorker.js 执行时,它甚至没有进入 addEventListener 部分,上面的任何东西都只执行,我已经通过给出一些 console.log() 进行了测试.only 被打印出来
    • 这不是关于确定,而是关于事实。事实是有问题。例如,如果您对 DOM 使用 addEventListener,它将失败,因为 ManifestV3 后台脚本中没有 DOM。通常,后台脚本中的任何内容都不需要 addEventListener 。如果您遵循链接主题中的解决方案,您至少会看到错误。或者,在 Chrome Canary 中加载扩展程序,这样它就会在没有任何其他解决方法的情况下显示错误。无论如何,这已经超出了此问题的主题,因此您可以使用新的MCVE 提出新问题。
    猜你喜欢
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    相关资源
    最近更新 更多