vue.js - 使用脚本 ('http://localhost/service-worker.js') 为范围 ('http://localhost/') 注册 ServiceWorker 失败
问题描述
我正在尝试将我的 vue pwa 项目转换为带有电容器的 android 项目。
这是我遵循的步骤。
首先将 pwa 添加到我的 vue 项目并构建它
vue add @vue/pwa
npm run build
此时,该应用程序作为 pwa 工作,具有 serviceworker 和离线支持。然后我添加了电容器并转换为android项目
npm install --save @capacitor/core @capacitor/cli
npx cap init
npx cap add android
npm run build
npx cap copy
npx cap open android
但是当我运行android项目时,出现以下错误
E/Capacitor/Console: File: http://localhost/js/chunk-vendors.3815e007.js - Line 7 - Msg: TypeError: Cannot read property '-1' of undefined
I/chromium: [INFO:CONSOLE(0)] "An unknown error occurred when fetching the script.", source: (0)
E/Capacitor/Console: File: http://localhost/js/app.15b911b2.js - Line 1 - Msg: Error during service worker registration: TypeError: Failed to register a ServiceWorker for scope ('http://localhost/') with script ('http://localhost/service-worker.js'): An unknown error occurred when fetching the script.
D/Capacitor: App paused
这是 我需要正常工作的控制台日志
编辑:当我点击http://localhost/js/app.15b911b2.js
我发现没有找到。但是,如果我将端口添加到链接中-
http://localhost:8081/js/app.15b911b2.js
我可以获取文件。所以我猜测是否可以让我的项目使用带有端口的链接问题将得到解决。
解决方案
服务人员不会处理电容器请求,因此他们无法加载。您可以像这样添加此代码MainActivity.java
:
if(Build.VERSION.SDK_INT >= 24 ){
ServiceWorkerController swController = ServiceWorkerController.getInstance();
swController.setServiceWorkerClient(new ServiceWorkerClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebResourceRequest request) {
return bridge.getLocalServer().shouldInterceptRequest(request);
}
});
}
但请注意,它需要 SDK 24,而 Capacitor 支持 SDK 21,所以它在 21-23 不起作用
推荐阅读
- python - 在 Pandas 日期时间列中标记夏令时 (DST) 小时
- twitter-bootstrap - 如果总和小于 12,则为列的全宽
- css - 我的网站无法在移动设备上正确显示
- r - r- Velox 提取错误:“boostFactory$makePointGrid 中的错误 ... std::bad_alloc”
- python - IntegrityError:安装夹具时出现问题
- listview - 如何将额外的参数传递给 Flutter 中 ListView.builder Widget 的 itemBuilder 函数?
- javascript - 当 JavaScript 最大数字长度超过 16 时,会发生什么?
- php - 如何使 laravel 多对一(hasMany)关系有效
- javascript - 在命令后 5 分钟发送消息
- r - rjags 安装在 Windows 上,但无法加载