我将service workers
合并到我的meteor
应用中;在桌面浏览器上一切正常,所以我试图在手机上测试它。
因此该应用程序正在localhost
上运行,而我正在运行ngrok
,因此我可以通过手机访问该应用。当代码尝试安装service worker
时,我收到以下错误:
SecurityError: Failed to register a ServiceWorker: the origin of the provided scriptURL (localhost:3000) does not match the current origin (https://abc123.ngrok.io)
有没有解决方法,所以我可以在开发过程中在手机上使用service workers
进行播放?
(这是我的设置,以防它有所作为 - 这是非常标准的)
try {
navigator.serviceWorker.register(Meteor.absoluteUrl('sw.js')).then((registration) => {
return registration.pushManager.getSubscription()
.then((subscription) => {
if(subscription) {
return subscription;
}
const reg = registration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlBase64ToUint8Array(publicKey)
});
return reg;
})
.then((subscription) => {
savePushRegistration.call({ pushSubscription: JSON.stringify(subscription) });
});
})
.catch((error) => {
console.info('Can\'t load SW', error); //This is where the error appears
});
} catch (e) {
// We're good here
// Just an old browser
}
});
答案 0 :(得分:1)
我在笔记本电脑上运行HTTPS网络服务器,如果他们在同一个WiFi网络上,我的设备可以连接到这些服务器。我为我的域配置了短TTL(5分钟)的自定义CNAME,并为他们提供笔记本电脑的IP。我的笔记本电脑服务器会监听这些主机名:
https://laptop-home.example.com
https://laptop-work.example.com
https://laptop-secret-lair.example.com
在计算机上获取本地运行的HTTP超出了此问题的范围,但您应使用可在手机上安装和信任的自定义CA根证书创建自己的自签名证书。然后,当您浏览所有自签名网站时,您将避免使用SSL警告。
比使用远程服务器多一点工作,但如果你想避开外部服务器,这是值得的。