繁体   English   中英

如何将服务工作者注册到重定向的脚本URL

[英]How to register service workers to a redirected script URL

这可能属于“不要那样做”的范畴,但我正在尝试开发一个有效地将Web可访问的服务工作者脚本(“sw.js”)注入用户页面的chrome扩展,然后注册该脚本的服务工作者。

现在,我有以下内容:Manifest.json:

{
  "manifest_version": 2,

  "name": "MyApp",
  "description": "none",
  "version": "1.0",
  "incognito": "split",
  "web_accessible_resources": ["sw.js"],
  "permissions": [

          "webRequestBlocking","webRequest",
          "*://*/*"
        ],

  "background": 
  {
    "scripts": ["background.js"]
  },
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["initPage.js"],
      "all_frames": false
    }]
}

background.js

chrome.webRequest.onBeforeRequest.addListener(
  function(details) {
    return {redirectUrl: chrome.extension.getURL("sw.js")};
  },
  {urls: ["*://*/switchme.js"]},
  ["blocking"]);

initPage.js:

if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/switchme.js').then(function(registration) {
      console.log('ServiceWorker registration successful with scope: ',    registration.scope);
    }).catch(function(err) {
      console.log('ServiceWorker registration failed: ', err);
  })
}

希望通过这个,你会看到我正在努力实现的目标。 基本上,我想尝试将服务工作者注册到sw.jssw.js托管在扩展中的Web-accessible-scripts中。 我相信我能做到这一点的方法是拦截switchme.js的请求并重定向它以返回sw.js

这种方法的唯一问题是我的Chrome浏览器在尝试此操作时崩溃了。 我将栈跟踪到extensions::sendRequestextensions::sendRequest

nativeFunction(functionName,
  request.args,
  requestId,
  hasCallback,
  optArgs.forIOThread,
  optArgs.preserveNullInObjects);

任何调试的想法或打击头部都有一个很好的解释,为什么我疯了认为这可能有用。

浏览器崩溃似乎与铬问题跟踪器上报告的错误有关

但请注意, 铬源的这一变化表明问题不再是从扩展程序的URL注册服务工作者。

从提交消息:

[服务人员注册]注册扩展计划,以便服务人员

服务工作者需要安全的来源,例如HTTPS。 chrome-extension://页面不是HTTP / HTTPS,但是是安全的,因此这个更改成为允许扩展注册服务工作者的必要步骤。

“chrome-extension”被添加为允许服务人员的计划。


作为脚注,镀铬扩展的服务工作者仍在进行中。 您可以通过跟踪此问题来跟踪其进度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM