以上就是给各位分享前端每周清单:jQuery3.2发布,滴滴采用Vue2.0重构WebApp、饿了么PWA实践经验分享,同时本文还将给你拓展2022年了,还不了解PWA?教你VuePress博客如何快
以上就是给各位分享前端每周清单:jQuery 3.2发布,滴滴采用Vue 2.0重构Web App、饿了么 PWA 实践经验分享,同时本文还将给你拓展2022 年了,还不了解 PWA ? 教你 VuePress 博客如何快速兼容 PWA、nuxt.js pwa 的启动画面添加到主屏幕 ios 和 Apk pwa、PWA “start_url 确实响应了,但不是通过 service worker” -- NextJS-PWA、PWA:防止 url 在 PWA 中打开等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- 前端每周清单:jQuery 3.2发布,滴滴采用Vue 2.0重构Web App、饿了么 PWA 实践经验分享
- 2022 年了,还不了解 PWA ? 教你 VuePress 博客如何快速兼容 PWA
- nuxt.js pwa 的启动画面添加到主屏幕 ios 和 Apk pwa
- PWA “start_url 确实响应了,但不是通过 service worker” -- NextJS-PWA
- PWA:防止 url 在 PWA 中打开
前端每周清单:jQuery 3.2发布,滴滴采用Vue 2.0重构Web App、饿了么 PWA 实践经验分享
前端每周清单:jQuery 3.2发布,滴滴采用Vue 2.0重构Web App、饿了么 PWA 实践经验分享 为InfoQ中文站特供稿件,首发地址为这里;如需转载,请与InfoQ中文站联系。从属于笔者的Web 前端入门与工程实践。更多阅读清单请转向往期索引。
前端每周清单:前端每周清单:jQuery 3.2发布,滴滴采用Vue 2.0重构Web App、饿了么 PWA 实践经验分享
新闻热点
前端领域最新动态
《Facebook 发布 Create React Native App》:类似于 Create-React-App,Create React Native App 能够为开发者快速创建零配置的 React Native 项目,并且与基于 Expo 构建了完整的可以屏蔽底层原生代码细节的 React Native 项目,使得开发者可以快速尝试上手 React Native 项目 。同时,开发者也可以使用
npm run eject
命令将项目切换到全配置状态,以方便自行添加原生组件。 ( http://6me.us/29r )《2017 React 大会成功举办》:2017 年 React Conf 于 3 月 13 日、14 日成功举办,会上来自世界各地的开发者就 React Fiber、Flow、Performance、React Native 等多个主题发表了演说与讨论,推荐选择自己喜欢的演讲视频观看。( http://conf.reactjs.org/lives... )
《jQuery 3.2.0 发布》:jQuery 3.2.0 中包含了一系列的错误修复、性能提升以及部分弃用 API 的彻底移除 。重大的更新包括添加了对于自定义 CSS 属性操作的支持,彻底移除了 isArray、nodeName 等方法以及修复了
.width()
等部分方法中的问题。( http://6me.us/BN8 )《Sketch 宣布开源其文件格式》:随着近日发布的 Sketch 43 版本,Sketch 宣布开源其文件格式,这也意味着未来可能会有人基于该格式开发 Windows 版本应用或者简单的 Sketch 文件浏览器。鉴于其文件格式为 JSON,我们也可以畅想未来会出现自动构建的 Web Service。( http://6me.us/DyAYEC )
《Chromium 即将支持 APNG》:该 Commit 会为 Chromium 添加 APNG 格式的支持,该格式可以逐步替换现存的 Gif 格式 。( https://parg.co/bO9 )
《Kotlin 1.1新增协程、类型别名特性,提升了对JavaScript的支持》:Kotlin的新版本引入了多项新的语言特性(其中最值得注意的就是协程),同时还提升了对其JavaScript目标环境的支持。( http://www.infoq.com/cn/news/... )
开发教程
步步为营,掌握基础技能
《Flexbox 语法清单》:该网页提供了交互式的 CSS Flexbox 教程,详细介绍了 Flexbox 的使用语法与经典案例。( http://yoksel.github.io/flex-... )
《Sketch:React Native 的 Playground 》:随着 Create React Native App 的发布,Expo 发布了能够在线编辑 React Native 应用的工具 Sketch。开发者可以在 Web 上直接编辑 React Native 应用代码,或者拖拽方式加入组件,然后通过 Expo 客户端完成本地预览。( http://6me.us/aGFX )
《编写 JavaScript 框架:客户端路由》:本文是编写 JavaScript 框架系列的最后一篇,主要着眼于讨论如何实现 JavaScript 客户端路由及其与服务端路由的区别。( https://parg.co/bOL )
《30 天学习 30 个 VR 项目》:本系列作者介绍了从 0 到 1 如何开发 30 个常见的 VR 项目,从最基础的图片浏览、视频播放,到交互性动画等等 。( https://risonsimon.com/days-i... )
《CORS 详细指南》:本文是对于浏览器中跨域访问协议 CORS 进行详细介绍,并且以完整的代码交互示例演示 CORS 协议的效果与使用方法。( https://parg.co/bOF )
《Angular的模块间通信》:模块是Angular的构建单元,Angular应用程序的所有可视化元素也是由模块构建的。当我们把模块拆散成更小的模块时,我们就要确保它们可以把数据传来传去。到那时候,恰当地模块间通信机制就成了我们应用程序的基础,可以让所有的数据都保持同步状态。( https://parg.co/bOD )
工程实践
立足实践,提示实际水平
《前端代码测试概述》:作者在本系列文章中介绍了前端代码测试的相关概念与实践技巧,包括了单元测试、集成测试、端到端测试等多个方面。( http://6me.us/posk )
《以组件为中心的 React 懒加载》:React Loadable 是以组件为中心的懒加载框架,其基于 Webpack 2 提供的
import
提供的异步代码分割与加载功能进行了一系列的封装。( http://6me.us/mNHi )《另一种 CSS 压缩思路》:本文作者提出了一种新的 CSS 压缩思路,有可能会损坏原有的 CSS 文件,不过其压缩比率相较于现有的通用 CSS 压缩策略会更为优秀。( https://luisant.ca/remynifier )
《来自 Vixlet 的 React 优化策略》:在过去的数年中,来自 Vixlet 的前端开发团队一直使用 React 与 Redux 的开发架构,本文即是该团队分享其在开发过程中发现的 React 优化策略的介绍。( http://6me.us/dx5 )
《PWA 在饿了么的实践经验》:本篇旨在和大家分享「饿了么 M 站」(https://h5.ele.me/msite/)在 PWA 改造中的实践经验。涉及到的方面有:PWA 线上部署的准备工作、多页应用的 prerender 优化、实践过程中踩到的(和推进解决的)坑。( https://parg.co/bO7 )
《滴滴 webapp 5.0 Vue 2.0 重构经验分享》:滴滴的 webapp 是运行在微信、支付宝、手 Q 以及其它第三方渠道的打车软件。借着产品层面的功能和视觉升级,我们用 Vue 2.0 对它进行了一次技术重构;本文即是本次重构中的经验分享。( https://github.com/DDFE/DDFE-... )
深度阅读
深度思考,升华开发智慧
《2017 成为专业 Web 开发者的学习路线图》:作者在此文中以图表的方式展现了 2017 年中如果想成为专业的 Web 开发者,应该在 Web 前端、服务端以及 DevOps 领域所需要学习到的技术栈以及进阶路线图。( http://6me.us/W0k )
《关于 JWE 安全漏洞的讨论》:JSON Web Token 是基于 JSON 的访问令牌创建标准(RFC 7519),本文则是介绍了 JWE 面对的 Invalid Curve Attack 原理以及受影响的开源库等内容。( http://6me.us/D0iKp )
《wasm_lua》:wasm_lua 提供了能够运行于 WASM 环境下的 Lua 虚拟机,未来基于 Lua 构建前端框架也是个可行的选择 。( https://github.com/vvanders/w... )
《U.S. Web 设计标准》:近日 U.S. 官方网站的样式与视觉设计指南 1.0.0 版本发布,包含了大量的 Bug 修复与反馈修正。( https://parg.co/bO1 )
《Preact 内部原理探秘》:Preact 是提供了类似于 React API 不过速度更快、包体更小的 React 替代包,本系列文章是 Preact 的开发者介绍其内部工作原理 。( https://parg.co/bOj )
《扩展JS应用在架构性取舍上应关注八点要素》:如果想要构建可扩展的软件,可以从很多角度来思考软件架构。但是如果每个角度都去考虑,根本不可能做出想要的软件。这就是为什么需要从架构的角度对设计进行取舍:取我们最需要的,舍次要的。。( https://parg.co/bOn )
开源项目
乐于分享,共推前端发展
《手淘发布 Atlas》:手机淘宝安卓客户端容器化框架 Atlas 正式宣布开源。Atlas由阿里巴巴移动团队自研,以容器化思路解决大规模团队协作问题,实现并行开发、快速迭代和动态部署,适用于Android 4.x以上系统版本的大小型App开发。 (https://github.com/alibaba/at...
《Animista》:Animista 是开箱即用的 CSS 动画库,其作者还发布了非常易用的在线预览与选择站点,适合于设计人员选择合适的动画效果。( http://animista.net/ )
《Quokka.js》:Quokka 能够帮助我们在常用的编辑器(譬如 VSCode)中快速建立原型试验场,包括了行内错误提示、代码测试与覆盖率提示、富文本输出格式化等等。( https://quokkajs.com/ )
《Guetzli》:Google 宣布开源新的 JPEG 编码器 Guetzli,与现有的压缩编码工具相比,其能够减少近 35% 的文件尺寸而依然保持图片质量。( http://6me.us/AM7a )
《wasm-loader》:wasm-loader 是能够用于 Webpack 的 WASM 二进制模块导入工具,其能够允许你在 JavaScript 代码中导入 wasm 格式文件并且将二进制文件打包成为 JS Bundle 的一部分 。( https://github.com/ballercat/... )
巅峰人生
一览众山,聆听巅峰故事
2022 年了,还不了解 PWA ? 教你 VuePress 博客如何快速兼容 PWA
前言
在 《一篇带你用 VuePress + Github Pages 搭建博客》中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档。
本篇我们讲讲如何兼容 PWA。
PWA
PWA,英文全称:Progressive Web Apps
, 中文翻译:渐进式 Web 应用。
引用 MDN 的介绍:
PWA 指的是使用指定技术和标准模式来开发的 Web 应用,这同时赋予它们 Web 应用和原生应用的特性。
例如一方面,Web 应用更加易于发现:相比于安装应用,访问一个网站显然更加容易和迅速。你还可以通过链接来分享 Web 应用。
另一方面,原生应用与操作系统可以更加完美的整合,也因此为用户提供了无缝的用户体验。你可以通过安装应用使得它在离线的状态下也可以运行;相较于使用浏览器访问,用户也更喜欢通过点击主页上的图标来访问它们喜爱的应用。
PWA 赋予了我们创建同时拥有以上两种优势的应用的能力。
体验
如果你之前没有了解过 PWA,大概率可能也不明白这是个什么效果,没有关系,我们直接看一个 PWA 应用示例,我们打开 https://m.weibo.cn/,这里是在电脑端打开的:
我们可以看到,在地址栏还有一个安装图标,点击一下,就会弹出安装应用的选项框:
我们点击安装后,该页面会自动关闭,然后开启一个应用窗口:
同时,打开 Mac 的启动台,我们会看到已经添加了微博的图标:
点击就会直接打开上面的应用窗口。
简单的来说,我们兼容 PWA,就是想要实现这样的桌面图标的功能,当然了, PWA 其他还有离线缓存、推送通知等功能,这里就不多说了。
开启 PWA
开启 PWA,需要注意三个点:
- 提供一个 manifest.json 文件,描述应用的名称、图标等信息
- 开启 Service Worker,这个交给现有的 PWA 插件来实现
- 开启 HTTPS
实践
1. 安装
插件地址:https://v1.vuepress.vuejs.org/zh/plugin/official/plugin-pwa.html
yarn add -D @vuepress/plugin-pwa
# OR npm install -D @vuepress/plugin-pwa
2. 修改 config.js
module.exports = { head: [ [''link'', { rel: ''icon'', href: ''/logo.png'' }], [''link'', { rel: ''manifest'', href: ''/manifest.json'' }], [''meta'', { name: ''theme-color'', content: ''#3eaf7c'' }], [''meta'', { name: ''apple-mobile-web-app-capable'', content: ''yes'' }], [''meta'', { name: ''apple-mobile-web-app-status-bar-style'', content: ''black'' }], [''link'', { rel: ''apple-touch-icon'', href: ''/icons/apple-touch-icon-152x152.png'' }], [''link'', { rel: ''mask-icon'', href: ''/icons/safari-pinned-tab.svg'', color: ''#3eaf7c'' }], [''meta'', { name: ''msapplication-TileImage'', content: ''/icons/msapplication-icon-144x144.png'' }], [''meta'', { name: ''msapplication-TileColor'', content: ''#000000'' }] ], plugins: [ [ ''@vuepress/pwa'', { serviceWorker: true, updatePopup: { message: "发现新内容可用", buttonText: "刷新" } } ] ] }
3. 添加 manifest.json 等资源
接下来我们添加所需要的资源,在 .vuepress
目录下建立 public
文件夹,然后添加所需要的文件如 manifest.json
文件:
{ "name": "TypeScript中文文档", "short_name": "TypeScriptDocs", "display": "standalone", "background_color": "#fff", "start_url": "/learn-typescript-test/", "scope": "/learn-typescript-test/", "description": "TypeScript 中文文档 进阶教程", "icons": [{ "src": "logo52.png", "sizes": "52x52", "type": "image/png" },{ "src": "logo288.png", "sizes": "288x288", "type": "image/png" }] }
这其中字段的具体含义,可以查看 MDN 的 Manifest 介绍。
要注意其中的 start_url
和scope
,如果你使用的是 GitHub 或者 Gitee 仓库的 Pages 服务,并且地址上带了仓库名,你需要将这里的learn-typescript-test
替换为你的仓库名,如果是直接的域名,start_url 写成 \
,scope
写成 .
或者直接不写。
然后是补齐所需要的图标图片:
4. 部署生产环境测试
虽然我们在上篇《VuePress 博客如何开启本地 HTTPS 访问》 讲了如何在本地开启 HTTPS,但是因为我们使用的这个插件只有在生产环境才会开启 Service Worker:
所以呢,我们部署到线上看一下效果,如果顺利的话,你就会看到地址栏上也出现了安装图标:
常见问题
但如果没有显示该图标,我们可以查看开发者工具里的「应用」 -「清单」,其中会显示出现的错误:
根据这里的报错进行排查。
如果出现了可安装性中的:
为检测到任何匹配的 service worker。您可能需要重新加载页面,或者检查当前页面的 service worker 是否也控制了清单错误中的起始 URL。
这也有可能是因为你的 start_url
和 scope
设置的有问题。
正常安装后,如果打开应用发现背景色是 Vue 绿色,比如这种:
这是因为你忘记修改 config.js 里的背景色了:
系列文章
博客搭建系列是我至今写的唯一一个偏实战的系列教程,预计 20 篇左右,讲解如何使用 VuePress 搭建、优化博客,并部署到 GitHub、Gitee、私有服务器等平台。本篇为第 23 篇,全系列文章地址:https://github.com/mqyqingfeng/Blog
微信:「mqyqingfeng」,加我进冴羽唯一的读者群。
如果有错误或者不严谨的地方,请务必给予指正,十分感谢。如果喜欢或者有所启发,欢迎 star,对作者也是一种鼓励。
nuxt.js pwa 的启动画面添加到主屏幕 ios 和 Apk pwa
如何解决nuxt.js pwa 的启动画面添加到主屏幕 ios 和 Apk pwa
嘿,我正在尝试为我的 nuxt js 项目设置启动画面,我已经尝试过所有像这样的元标记: ————
{link rel:"apple-touch-startup- image",media:"screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)",href:"splash/launch-2688x1242.png"}
———-
在我的 nuxt-config.js 中的所有尺寸中,但不工作, 如果你知道如何为我的 nuxt 项目设置启动画面,请帮助我
解决方法
为此,您可以自定义加载指示器:https://nuxtjs.org/docs/2.x/features/loading/#the-loading-indicator-property
并使用自定义的,您可以在其中设计您的启动画面。
不确定它是 PWA 的事实是否需要额外的工作,但如果是,这个应该解决它:https://pwa.nuxtjs.org/icon/
PWA “start_url 确实响应了,但不是通过 service worker” -- NextJS-PWA
如何解决PWA “start_url 确实响应了,但不是通过 service worker” -- NextJS-PWA
我一直在使用 next-pwa
(npm link) 来自动化服务工作者设置,以便在 NextJS 中设置 PWA。在大多数情况下,一切都很顺利。但是,我终生无法弄清楚如何解决灯塔审计中仍然出现的一个错误(如下所示)。我已经阅读了大量帖子并尝试实施了几种不同的解决方案,但到目前为止还没有骰子。
这是由sw.js
自动创建的NextJS
。
// sw.js
if (!self.define) {
const e = e => {
''require'' !== e && (e += ''.js'');
let n = Promise.resolve();
return (
i[e] ||
(n = new Promise(async n => {
if (''document'' in self) {
const i = document.createElement(''script'');
(i.src = e),document.head.appendChild(i),(i.onload = n);
} else importScripts(e),n();
})),n.then(() => {
if (!i[e]) throw new Error(`Module ${e} didn’t register its module`);
return i[e];
})
);
},n = (n,i) => {
Promise.all(n.map(e)).then(e => i(1 === e.length ? e[0] : e));
},i = { require: Promise.resolve(n) };
self.define = (n,s,c) => {
i[n] ||
(i[n] = Promise.resolve().then(() => {
let i = {};
const r = { uri: location.origin + n.slice(1) };
return Promise.all(
s.map(n => {
switch (n) {
case ''exports'':
return i;
case ''module'':
return r;
default:
return e(n);
}
})
).then(e => {
const n = c(...e);
return i.default || (i.default = n),i;
});
}));
};
}
define(''./sw.js'',[''./workBox-1ca495a9''],function(e) {
''use strict'';
importScripts(),self.skipwaiting(),e.clientsClaim(),e.precacheAndRoute(
[
{
url: ''/_next/static/Bf0fOQ5vTfsmLElkL5uPJ/_buildManifest.js'',revision: ''Bf0fOQ5vTfsmLElkL5uPJ''
},{
url: ''/_next/static/Bf0fOQ5vTfsmLElkL5uPJ/_ssgManifest.js'',{
url: ''/_next/static/chunks/224-5da05219d75f4eb1a9e2.js'',{
url: ''/_next/static/chunks/580-2d0b17ccc09c231c1f63.js'',{
url: ''/_next/static/chunks/597-27159eb1f0ff7f4322bb.js'',{
url: ''/_next/static/chunks/framework-40503bb0b87dcc30c2dc.js'',{
url: ''/_next/static/chunks/main-f0954d00fdee968e0986.js'',{
url: ''/_next/static/chunks/pages/_app-f80cf1ab407b29886a1c.js'',{
url: ''/_next/static/chunks/pages/_error-8470b41bc6cfedf1d350.js'',{
url: ''/_next/static/chunks/pages/index-e03b34c1331d21cd05ac.js'',{
url: ''/_next/static/chunks/polyfills-3d2c0f0875171918a758.js'',{
url: ''/_next/static/chunks/webpack-fb3a8e0c92f7e9ed77fb.js'',{
url: ''/browserconfig.xml'',revision: ''653d077300a12f09a69caeea7a8947f8''
},{ url: ''/favicon.ico'',revision: ''21b739d43fcb9bbb83d8541fe4fe88fa'' },{
url: ''/icons/android-icon-144x144.png'',revision: ''ba231a435173f4830fe422263f5dd3eb''
},{
url: ''/icons/android-icon-192x192.png'',revision: ''93bde9a252c9a48d377f60dfa88b25e2''
},{
url: ''/icons/android-icon-36x36.png'',revision: ''60cbd3297c42a432069c7f5e9d640c12''
},{
url: ''/icons/android-icon-48x48.png'',revision: ''4b898d6d22adce8db36ede1b8c811f1b''
},{
url: ''/icons/android-icon-512x512.png'',revision: ''6a8a40c983dbc0bc42a97b9e4cda77a6''
},{
url: ''/icons/android-icon-72x72.png'',revision: ''3d1f4c9b46b285fa6cb2c587ea2334e0''
},{
url: ''/icons/android-icon-96x96.png'',revision: ''5f522065b076d980b50278fecf7c0f34''
},{
url: ''/icons/apple-icon-114x114.png'',revision: ''ca65289710709e327077cf035bade9e0''
},{
url: ''/icons/apple-icon-120x120.png'',revision: ''478371dd294735fa2d579d0c027442be''
},{
url: ''/icons/apple-icon-144x144.png'',{
url: ''/icons/apple-icon-152x152.png'',revision: ''c7c7e34b1d917f17a4132eb253262424''
},{
url: ''/icons/apple-icon-180x180.png'',revision: ''117fea2a93944d8ecab1797de5bbe301''
},{
url: ''/icons/apple-icon-512x512.png'',{
url: ''/icons/apple-icon-57x57.png'',revision: ''5c0a5653d999f01b12ba2a2c1343a664''
},{
url: ''/icons/apple-icon-60x60.png'',revision: ''6ee47df922e9336918c9266c651fbb11''
},{
url: ''/icons/apple-icon-72x72.png'',{
url: ''/icons/apple-icon-76x76.png'',revision: ''f7e6c5d5649be3dac2479043e0c3c05f''
},{
url: ''/icons/apple-icon-precomposed.png'',revision: ''528eff11ef1a3f9094763b37bb9ef69e''
},{
url: ''/icons/apple-icon.png'',{
url: ''/icons/favicon-16x16.png'',revision: ''e90dc768aad2517760a068c794a8e7da''
},{
url: ''/icons/favicon-32x32.png'',revision: ''2804f09f47660e4593b8f05f1007973f''
},{
url: ''/icons/favicon-96x96.png'',{
url: ''/icons/maskable_icon_x1.png'',revision: ''cab51d5ebecc0e119828c83518472714''
},{
url: ''/icons/ms-icon-144x144.png'',{
url: ''/icons/ms-icon-150x150.png'',revision: ''f0b0f7361d893e945de9e383b898b485''
},{
url: ''/icons/ms-icon-310x310.png'',revision: ''f3258e3670d0eb63ba56fb40ad30386c''
},{
url: ''/icons/ms-icon-512x512.png'',{
url: ''/icons/ms-icon-70x70.png'',revision: ''7a04d01451acba7481bd3ddfadb7255d''
},{ url: ''/manifest.json'',revision: ''973196764f3f071b66c8f53b18a0eda3'' },{ url: ''/vercel.svg'',revision: ''4b4f1876502eb6721764637fe5c41702'' }
],{ ignoreURLParametersMatching: [] }
),e.cleanupOutdatedCaches(),e.registerRoute(
''/'',new e.NetworkFirst({
cacheName: ''start-url'',plugins: [
new e.ExpirationPlugin({
maxEntries: 1,maxAgeSeconds: 86400,purgeOnQuotaError: !0
})
]
}),''GET''
),e.registerRoute(
/^https:\\/\\/fonts\\.(?:googleapis|gstatic)\\.com\\/.*/i,new e.CacheFirst({
cacheName: ''google-fonts'',plugins: [
new e.ExpirationPlugin({
maxEntries: 4,maxAgeSeconds: 31536e3,e.registerRoute(
/\\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({
cacheName: ''static-font-assets'',maxAgeSeconds: 604800,e.registerRoute(
/\\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({
cacheName: ''static-image-assets'',plugins: [
new e.ExpirationPlugin({
maxEntries: 64,e.registerRoute(
/\\.(?:js)$/i,new e.StaleWhileRevalidate({
cacheName: ''static-js-assets'',plugins: [
new e.ExpirationPlugin({
maxEntries: 32,e.registerRoute(
/\\.(?:css|less)$/i,new e.StaleWhileRevalidate({
cacheName: ''static-style-assets'',e.registerRoute(
/\\.(?:json|xml|csv)$/i,new e.NetworkFirst({
cacheName: ''static-data-assets'',e.registerRoute(
/\\/api\\/.*$/i,new e.NetworkFirst({
cacheName: ''apis'',networkTimeoutSeconds: 10,plugins: [
new e.ExpirationPlugin({
maxEntries: 16,e.registerRoute(
/.*/i,new e.NetworkFirst({
cacheName: ''others'',''GET''
);
});
这是next.config.js
const withPWA = require(''next-pwa'');
module.exports = withPWA({
disable: process.env.NODE_ENV === ''development'',register: true,sw: ''/sw.js'',future: { webpack5: true },distDir: ''/.next'',pwa: {
dest: ''public''
}
});
和我的public/manifest.json
{
"name": "Parakeat Language Learning","short_name": "Parakeat","icons": [
{
"src": "icons/android-icon-36x36.png","sizes": "36x36","type": "image/png","density": "0.75"
},{
"src": "icons/android-icon-48x48.png","sizes": "48x48","density": "1.0"
},{
"src": "icons/android-icon-72x72.png","sizes": "72x72","density": "1.5"
},{
"src": "icons/android-icon-96x96.png","sizes": "96x96","density": "2.0"
},{
"src": "icons/android-icon-144x144.png","sizes": "144x144","density": "3.0"
},{
"src": "icons/android-icon-192x192.png","sizes": "192x192","density": "4.0"
},{
"src": "icons/android-icon-512x512.png","sizes": "512x512",{
"src": "icons/maskable_icon_x1.png","sizes": "196x196","purpose": "any maskable"
}
],"start_url": "/","scope": "","orientation": "portrait","display": "standalone","theme_color": "#002","background_color": "#ffffff"
}
我几乎没有想法,我一直在阅读 next-pwa npm docs、相关的 example file 和 third-party resources,对于所有这些内容,它似乎只是 工作,然而......我没有这样的运气。
最后,我部署它时的响应(虽然它成功了,也许这是问题的一部分?)
解决方法
根据:
https://github.com/shadowwalker/next-pwa/issues/107
https://github.com/shadowwalker/next-pwa/issues/108
https://github.com/shadowwalker/next-pwa/issues/124
他们认为这是 Lighthouse 的一个错误。当我禁用网络时,它似乎可以正常工作。
PWA:防止 url 在 PWA 中打开
如何解决PWA:防止 url 在 PWA 中打开?
我使用 @angular/pwa
构建了一个 angular 应用,它支持 Microsoft、Google、Facebook 和 Twiitter 等外部登录。当用户想要使用外部登录名登录时,我使用 window.open
打开托管 Challenge
的 URL。
问题在于,当从浏览器中的网络应用程序调用 window.open
时,该 url 被强制在 PWA 中打开。
我几乎已经尽我所能来防止这种情况发生,但没有成功。我尝试的最后一件事是 host my endpoints for my external logins on a subdomain,效果很好。
但现在我已经在我的网络应用程序中实现了 2FA,为了使 2FA 起作用,必须从与调用 ExternalLoginSigninAsync
相同的域中调用 TwoFactorAuthenticatorSignInAsync
。那么如何强制一个 url (window.open) 在浏览器中打开而不是在 PWA 中打开?
PS:别想了
- 从 navigationUrls (
"navigationUrls": [ "!/web/v3/Account/connect/" ]
) 中排除 window.open(url,''_system'')
window.open(url,''_blank'')
- 使用 ngsw-bypass (
window.open(url + ''?ngsw-bypass=true'')
)
都试过了,还是不行。
编辑
This block of code 似乎决定了是启动 PWA 还是打开新标签页。
调用栈:
- WebappLauncherActivity.shouldLaunchWebapp
- WebApkValidator.canWebApkHandleUrl
-
WebApkValidator.resolveInfosForUrlAndOptionalPackage 应该为您不想在 PWA 中打开的网址返回
false
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
关于前端每周清单:jQuery 3.2发布,滴滴采用Vue 2.0重构Web App、饿了么 PWA 实践经验分享的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于2022 年了,还不了解 PWA ? 教你 VuePress 博客如何快速兼容 PWA、nuxt.js pwa 的启动画面添加到主屏幕 ios 和 Apk pwa、PWA “start_url 确实响应了,但不是通过 service worker” -- NextJS-PWA、PWA:防止 url 在 PWA 中打开的相关信息,请在本站寻找。
本文标签: