加载远程Service Worker,以便在其他域中运行
Load remote Service Worker, to run in a different domain?
我正试图在网站上放置一个Service Worker,我想从CDN加载Service Worker脚本。然而,当我从另一个域加载服务工作者时,我会收到以下错误。
ServiceWorker DOMException:未能注册ServiceWorker:提供的scriptURL的来源('https://cdndomain.com')没有匹配当前原点('http://mydomain')
有没有办法从CDN加载服务工作者?我见过一些推送通知服务在那里做这件事,我们可以使用eval在本地执行服务工作者js吗?
有什么解决办法吗?感谢
以下是我当前代码的
if (navigator.serviceWorker) {
console.log("ServiceWorkerssupported");
navigator.serviceWorker.register('https://cdn.com/sw.js', {
scope: './'
})
.then(function(reg) {
console.log("ServiceWorkerstered", reg);
})
.catch(function(error) {
console.log("Failedegister ServiceWorker", error);
});
}
服务工作者必须来自同一个域,因为服务工作者文件的位置非常重要。
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/sw.js').then(function(registration) {
// Registration was successful
console.log('ServiceWorker registration successful with scope: ', registration.scope);
}).catch(function(err) {
// registration failed :(
console.log('ServiceWorker registration failed: ', err);
});
}
register方法的一个微妙之处是服务的位置工作文件。在这种情况下,您会注意到服务工作者文件位于域的根目录。这意味着服务人员范围将是整个原点。换句话说,这个服务人员将接收此域上所有内容的获取事件。如果我们在/example/sw.js中注册服务工作者文件,然后服务工作程序只会看到URL以开头的页面的获取事件/example/(即/example/page1/、/example/page2/)。
您可以使用php脚本作为代理从其他地方加载它。
相关文章:
- 在其他javascript框架模板中运行angular指令
- If语句只执行第一个条件并运行其他条件,但没有结果
- stopPropagation是否还会阻止同一元素上的其他处理程序运行
- 如何停止一个函数并将其他函数设置为在 html5 的 javascript 中加载时运行
- 如何在咕噜声插件中运行其他已注册的咕噜声任务
- 在WordPress上运行其他javascript之后再运行javascript
- 根据其他onchange函数来选择在onchange中运行哪个函数
- 运行fancybox thumb时隐藏其他图像
- jQuery和其他从工作的jsfiddle复制到本地env时未运行的JS
- 一个咕哝的任务能运行其他咕哝的任务吗
- 在完成其他任务后运行gullow任务
- 当其他函数调用Javascript时运行我的代码
- Javascript可以在Safari上运行,但不能在任何其他浏览器上运行
- JS-强制函数在其他函数之后运行
- 脚本在除IE之外的所有其他浏览器中都能完美运行
- 是否可以使用其他目标运行javascript
- 如何将新函数绑定到元素的 onclick 事件,并使其在所有其他绑定函数之前运行
- 如何在运行时向计算可观察量添加其他数组项
- 内容脚本未在其他扩展程序页面的 iframe 中运行
- Firefox 不会播放声音,但可以在其他浏览器中运行