前几天写了一篇文章关于如何实现一个简单版的pwa应用,端午撸了一个简易版知乎日报pwa。

关于如何写一个pwa,这里就不多介绍了,请移步这里。应用使用vue+vuex+axios,API这里,这里做了跨域处理,可以直接访问,但是返回的图片链接却无法访问(forbidden),暂时没有解决这个问题。

应用构建

使用vue作为前端框架,由于有些数据共享问题,所以使用了vuex来做状态管理。由于是移动端,这里使用rem来做适配,只需要在项目初始化的时候设定全局字体大小即可(当然这个字体是很大的,你需要在组件中重新定义相应的字体大小)。

    var deviceWidth = document.documentElement.clientWidth;

    document.documentElement.style.fontSize = deviceWidth / 7.5 + 'px';

    // 页面宽度发生变化时动态生成根字体尺寸
window.onresize = function () {
var deviceWidth = document.documentElement.clientWidth;
if (deviceWidth > 750) deviceWidth = 750; // Iphone6Plus的屏幕尺寸
document.documentElement.style.fontSize = deviceWidth / 7.5 + 'px';
}

页面主要三部分,头部,内容区以及侧边栏。

  1. 侧边栏主要是实现一个点击头部按钮滑出的动画效果,并没有做手势效果。

  1. 头部就是一些常见的操作,不多只有最左侧的有效,为了弹出侧边栏,或者返回新闻列表页



红色区块点击弹出侧边栏,黑色区块这是返回首页



当然如果进入详情页变成箭头返回按钮,由于没有使用路由所以只能点击这里返回。

3. 内容区分为一个轮播图和内容列表。



没有请求到图片,将就点了。

坑与填坑

  1. 请求借口返回的信息有些链接是基于http的所以这里需要转成https直接正则替换即可
  2. 内容详情返回的是html字符串以及css链接,渲染html字符串直接使用指令v-html即可,但是由于样式库加载过慢导致页面乱,所以这里用一个粗暴的方法,先隐藏内容,等css请求回来之后再显示。css的地址需要跨域所以采用fetch请求,我们只需要请求返回结果即可,而不用返回具体值:
		fetch(cssUrl.replace(/http/g,'https'), {mode:'no-cors'})
.then(res => {
that.cssLoaded = true;
})
  1. 在调用vuex的store时,使用对象解构赋值(es7),所以先安装babel-preset-stage-3,然后.babelrc文件要配置下
"presets": [
["latest", {
"es2015": { "modules": false } }],
"stage-3"
]

pwa查看

由于pwa基于https,所以这里使用ngrok做代理,便于我们查看,当然你可以把做好的应用直接放到github上来查看。

关于ngrok的使用直接看官网即可,基础使用一看就懂https://ngrok.com

实现效果

在手机上使用google浏览器打开,并添加到桌面



添加到手机桌面,左侧是原生App, 右侧是pwa



配置的启动页



打开之后



我们可以看到,打开之后将浏览器的头部隐藏了,非常像一个原生APP。

断网之后



由于没有缓存信息,所以页面为空,但头部依然有,而且可以打开侧边栏。我们知道网页都可以添加到桌面,但是断网之后, 就成了这样

项目地址https://github.com/Stevenzwzhai/zhihu-daily

演示地址https://stevenzwzhai.github.io/zhihu-daily/

注:修复图片防盗链接,但是由于使用第三方缓存,所以可能会加载有点慢。

一个知乎日报pwa的更多相关文章

  1. 知乎日报win10版 - 天天读报【开源】

    业余时间写的一个知乎日报win10版客户端,支持收藏,评论,点赞等. 商店地址:https://www.microsoft.com/zh-cn/store/apps/%E5%A4%A9%E5%A4%A ...

  2. 知乎日报 API的图片盗链问题

    由最近 基于vue的知乎日报单页应用 引发的问题 以及问题解决历程 通过 知乎日报API 基于vue做一个知乎日报的单页应用,在获取图片时存在一个图片盗链问题,图片无法加载 提示 403 错误, 最终 ...

  3. 微信小程序开发日记——高仿知乎日报(下)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...

  4. 微信小程序开发日记——高仿知乎日报(中)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教 ...

  5. 微信小程序开发日记——高仿知乎日报(上)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...

  6. 【完全开源】知乎日报UWP版:增加Live磁贴、Badge、以及Toast通知

    目录 说明 实现方法 APP生命期 后台任务 说明 之前网上有人建议增加磁贴(tile).徽章(badge)功能.利用周末的时间,将这两个功能添加上去了.如果将磁贴固定到开始屏幕,磁贴就会循环播放首页 ...

  7. 【完全开源】知乎日报UWP版:项目结构说明、关键源代码解释

    目录 说明 项目结构 关键代码 演示视频 说明 上一篇博客将源码放出来了,但是并没有做过多的介绍,所以如果自己硬看可能需要花费很长的时间,尤其这些代码并不是自己写的.项目不算复杂但是也不算简单,这篇文 ...

  8. 【完全开源】知乎日报UWP版(下篇):商店APP、github源码、功能说明。Windows APP 良心出品。

    目录 说明 功能 截图+视频 关于源码和声明 说明 陆陆续续大概花了一个月的时间,APP算是基本完成了.12月份一直在外出差,在出差期间进行了两次功能完善,然后断断续续修补了一些bug,到目前为止,我 ...

  9. 【完全开源】知乎日报UWP版(上篇):界面设计、官方API分析

    目录 说明 使用Fiddler分析android版API 部分效果图 关于源码 说明 在做博客园UWP版的时候其实就有做知乎日报的打算了,前段时间一直出差,在酒店里用Fiddler简单的分析了一下An ...

随机推荐

  1. 【JeeSite】登录和主题切换

    最高管理员账号,用户名:thinkgem 密码:admin 1.    密码加密:登录用户密码进行SHA1散列加密,此加密方法是不可逆的.保证密文泄露后的安全问题. 在spring-shiro配置文件 ...

  2. google为什么将爬虫从python移植到C++

    这是好几年前Quora上的一个问题,有点过时,但看了之后感觉不错,就总结了一下 原文链接:http://www.quora.com/Why-did-Google-move-from-Python-to ...

  3. C#基础 一(方法详解)

    需要知道:类和方法的关系 方法和参数修饰符 自定义方法可以有或没有参数,也可以有或没有返回值.可以被各种关键字(static.virtual.public.new等)修饰以限制其行为. C#参数修饰符 ...

  4. 课时89.CSS三大特性练习(理解)

    给大家补充一点:通配符是不参与权重计算的,因为通配符的权重是0,而权重只计算id,类,标签,将来还有一种,到后面说. 练习1 直接选中和间接选中的,必然要听直接选中的. 练习2 直接选中一共有两个,直 ...

  5. Java 基础总结

    Java基础总结 jdk:Java的开发环境与部署环境jre:Java的运行环境 Java数据类型分为:基本类型和引用类型 基本类型:①整数类型 byte   short   int   long 默 ...

  6. Spring知识点总结(三)之注解方式实现IOC和DI

        1. 注解概念        所谓注解就是给程序看的提示信息,很多时候都用来作为轻量级配置的方式.        关于注解的知识点,参看java基础课程中java基础加强部分的内容.    2 ...

  7. 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)(Finchley版本)

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f5-zuul/ 本文出自方志朋的博客 在微服务架构中,需要几 ...

  8. Flask—04-文件上传与邮件发送(自带优化)

    文件上传与邮件发送 可以按照标题分别直接粘贴对应的文件夹,运行直接用: 原生上传 模板文件 <form method="post" enctype="multipa ...

  9. 魔板 Magic Squares(广搜,状态转化)

    题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 我们知道魔板的每一个方格都有一种颜色.这8种颜 ...

  10. chromium之pickle

    pickle谷歌翻译成泡菜 醉了,看一下头文件的说明 // This class provides facilities for basic binary value packing and unpa ...