需求背景:
在我们应用嵌入客户的native容器,客户想要通过它们的app扫一扫二维码登录pc版。类似微信扫一扫二维码登录pc版本,弹出确认登录页面,点击确认后登录。
实现思路:
1.客户使用手机app扫一扫PC端的登录二维码之后,打开一个新的webview,地址是这个登录页的地址,并且将二维码里的信息,以及token当做查询参数拼接在地址上。
2.打开后页面从url里获取对应的数据,在用户点击登录按钮的时候,发送一个POST请求给服务端,验证是否登录成功。
3.PC端轮训发送请求,询问服务端是否该用户登录成功。
要求
页面尽可能的小,需要考虑兼容性,加载速度,以及性能优化。
第一版实现
第一版的实现,没有考虑太多,只是测试一下,是否能登陆成功。没有引入库,而是直接使用XMLHttpRequest对象。另外引入了一张很小很小的图片。
1 |
|
宝哥的修改建议
第二版实现
1 |
|
优化的地方(我的想法):
- meta标签的viewport属性,禁止页面缩放,不过在ios10以上失效。
- 低版本的ie浏览器使用的是ActiveXObject对象。
- loading样式没有使用
display:none;
,而是使用visibility:hidden;
,减少浏览器重排。 - 增加了url查询参数的为空判断。
- a标签禁止了重复点击多次触发函数。
- 图片转成了Base64,直接内嵌。
- 登录失败如果服务端未返回msg字段,则使用默认字段。
待续。。
几个问题
1.图片转成Base64位的好处以及缺点,以及使用场景。
首先图片的 base64 编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址,
使用场景:如果图片非常非常小(这点最重要),或者不适合做成雪碧图,以及复用性低。
优点:减少http请求,无需考虑缓存问题
缺点:Base64编码之后的文本,要比原文大约三分之一