1. 浅尝 service worker

    最早听说service worker的时候是团队的分享会上,之后就听说了饿了么pwa改造,技术学习的脚步始终不能停。 对于一个新技术,它能做什么?它能给我带来什么?这一直是我在学习之前会反问的问题。 Service workers 本质上充当Web应用程序与浏览器之间的代理服务器,也可以在网络可用时作为浏览器和网络间的代理。它们旨在(除其他之外)使得能够创建有效的离线体验,拦截网络请求并基于网络是否可用以及更新的资源是否驻留在服务器上来采取适当的动作。他们还允许访问推送通知和后台同步API。 普通的浏览器环境下我们一般用它来缓存资源,提升页面打开速度。其他使用场景如下: 后台数据同步 响应来自其它源的资源请求 集中接收计算成本高的数据更新,比如地理位置和陀螺仪信息,这样多个页面就可以利用同一组数据 在客户端进行CoffeeScript,LESS,CJS/AMD等模块编译和依赖管理(用于开发目的) 后台服务钩子 自定义模板用于特定URL模式 性能增强,比如预取用户可能需要的资源,比如相册中的后面数张图片 第四点在 React的开发配置项里就有体现,利用官方的create-react-app就会有一个service worker 文件。 出于安全原因,Service Workers 要求要在必须在 HTTPS 下才能运行。为了便于本地开发,localhost 也被浏览器认为是安全源。 在 Firefox 的 private browsing mode 隐私模式下是无法使用 service worker 的,但是chrome 的隐私模式可以使用。 注意: localStorage 跟  service worker 的 cache 工作原理很类似,但是它是同步的,所以不允许在  service workers 内使用。 注意: IndexedDB 可以在  service worker 内做数据存储。 var VERSION = ‘v1’; //开始缓存 self.addEventListener(‘install’,function(event) { event.waitUntil(…

  2. html css编码规范

    有人建议编码规范这种东西应该落实到ESlint这类工具上去,而不是停留在文档层面。 在我看来,规范也要看和记,难道你用 vscode/sublime 写个demo还要配上语法检查这一套东西么。 HTML section里面要有标题标签 section/aside/article/nav这种标签,需要在里面写一个h1/h2/h3之类的标题标签,因为这四个标签可以划分章节,它们都是独立的章节,需要有标题,如果UI里面根本就没有标题呢?那你可以写一个隐藏的标题标签,如果出于SEO的目的,你不能直接display: none,而要用一些特殊的处理方式,如下套一个hidden-text的类: <style>.hidden-text{position: absolute; left: -9999px; right: -9999px}</style> <section> <h1 class=”hidden-text”>Listing Detail</h1> </section> 要用table布局写邮件模板 由于邮件客户端多种多样,你不知道用户是使用什么看的邮件,有可能是用的网页邮箱,也有可能用的gmail/outlook/网易邮箱大师等客户端。这些客户端多种多样,对html/css的支持也不一,所以我们不能使用高级的布局和排版,例如flex/float/absolute定位,使用较初级的table布局能够达到兼容性最好的效果,并且还有伸缩的效果。 另外邮件模板里面不能写媒体查询,不能写script,不能写外联样式,这些都会被邮件客户端过滤掉,样式都得用内联style,你可以先写成外联,然后再用一些工具帮你生成内联html。 写完后要实际测一下,可以用QQ邮箱发送,它支持发送html格式文本,发完后在不同的客户端打开看一下,看有没有问题,如手机的客户端,电脑的客户端,以及浏览器。 由于你不知道用户是用手机打开还是电脑打开,所以你不能把邮件内容的宽度写死,但是完全100%也不好,在PC大屏幕上看起来可能会太大,所以一般可以这样写: <table style=”border-collapse:collapse;font-family: Helvetica Neue,Helvetica,Arial;font-size:14px;width:100%;height:100%”> <tr><td align=”center” valign=”top”><table style=”border:1px solid #ececec;border-top:none; max-width:600px;border-collapse:collapse”> <tr><td>内容1</td></tr> <tr><td>内容2</td></tr> </table></td></tr></table> 最外面的table宽度100%,里面的table有一个max-width:600px,相对于外面的table居中。这样在PC上最大宽度就为600px,而在手机客户端上宽度就为100%。 但是有些客户端如比较老的outlook无法识别max-width的属性,导致在PC上太宽。但是这个没有办法,因为我们不能直接把宽度写死不然在手机上就要左右滑了,也不能写script判断ua之类的方法。所以无法兼容较老版本outlook.  img空src的问题 有时候可能你需要在写一个空的img标签,然后在JS里面动态地给它赋src,所以你可能会这么写: <img src=”” alt> 但是这样写会有问题,如果你写了一个空的src,会导致浏览器认为src就是当前页面链接,然后会再一次请求当前页面,就跟你写一个a标签的href为空类似。如果是background-image也会有类似的问题。这个时候怎么办呢?如果你随便写一个不存在的url,浏览器会报404的错误。 我知道的有两种解决方法,第一种是把src写成about:blank,如下: <img src=”about:blank” alt>…