javascript – 如何防止同一服务工作者注册多个页面?
作者:互联网
我有一个服务工作者脚本,它在多个站点级别上重复注册.
换句话说,同一服务工作者已注册www.site.ca/,www.site.ca/text-text,www.site.ca/example-example等.
该网站建立在PHP上,根据内容生成不同的网址,因此类似API.服务工作者注册在这些页面上的原因是因为大多数站点流量落在这些页面而不是主页上.结果是同一服务工作者在不同页面上注册了不同的ID.
有没有人有办法防止多个子级别上的同一脚本多次注册?
编辑:
即使用户不在站点上,服务工作者的目的是设置通知.此外,我所遇到的问题会对将来更新服务工作者的任何尝试产生负面影响,因为要更新多个副本.结果是当用户在特定页面上再次登陆站点时,只有一个副本会被更新.无法保证该服务工作文件的所有副本都将得到更新.此外,多个副本的结果导致用户从站点获得通知堆栈,因此这是一个问题.
编辑:
以下是我到目前为止的情况,我的理解范围定义了它的注册位置.然而问题是它需要能够在人进入站点的任何地方进行注册,因此范围被设置为“/”.
我想解决的问题是防止相同服务工作文件的后续寄存器.
Localhost是实际站点的占位符.
navigator.serviceWorker.register('localhost/service-worker.js', {scope: './'})
.then(initialiseState);
在用于调试的Chrome开发工具中,生成的服务工作者的格式如下:
范围:localhost / url / stuff /
注册ID:110
活跃的工人:
安装状态:已激活
运行状态:已停止
脚本:localhost / service-worker.js
…
范围:localhost /
注册ID:111
活跃的工人:
安装状态:已激活
运行状态:已停止
脚本:localhost / service-worker.js
…
范围:localhost / url
注册ID:112
活跃的工人:
安装状态:已激活
运行状态:已停止
脚本:localhost / service-worker.js
…
理想情况下,我想以某种方式将它保存到一个条目.
解决方法:
根据MDN,ServiceWorkerContainer.register方法接受选项的第二个参数:
Currently available options are:
- scope: A USVString representing a URL that defines a service worker’s registration scope; what range of URLs a service worker can
control. This is usually a relative URL, and it defaults to ‘/’ when
not specified.
至于你更新的问题,W3C Service Workers WD说:
A service worker registration of an identical scope url when one
already exists in the user agent causes the existing service worker
registration to be replaced.
因此navigator.serviceWorker.register(url,{scope:’/’}).then(doSomething)应该可行.
问题在于示例中的范围URL:
./ 应该 /
标签:javascript,service-worker 来源: https://codeday.me/bug/20190929/1830600.html