Chrome 插件开发:Alarms 定时与事件页面
Chrome 插件本身也提供了计划任务,使用起来也非常简单,我们主要顺着思路来解释一下事件页面的概念。
在使用之前,我们需要清楚,alarms 的 create 只包含了定时器名和一些定时器需要的相关信息,而具体执行什么,则是由 onAlarm
监听决定的,由 alarm 参数的信息来决定执行内容:
Chrome 插件本身也提供了计划任务,使用起来也非常简单,我们主要顺着思路来解释一下事件页面的概念。
在使用之前,我们需要清楚,alarms 的 create 只包含了定时器名和一些定时器需要的相关信息,而具体执行什么,则是由 onAlarm
监听决定的,由 alarm 参数的信息来决定执行内容:
Chrome 的 Storage 有点类似于 HTML5 的 localStorage,最初我没有注意到这个 API 的时候也是用 localStorage 存储的,但是它可以通过 storage.sync
使用浏览器自带的自动同步,在禁用 localStorage 的隐身模式,storage.sync
也能够正常的使用,此外它是异步操作,因此比阻塞和串行化的 localStorage 更快,用户的数据也能够存储为 String 以外的类型。
当然由于历史原因(需要将过去的配置进行兼容迁移),我这里还是没有直接存储对象,而是处理成字符串存储。(因为在 localStorage 中存储的就是这样,挨个处理太麻烦了 /w\)
Vue2.x 中父子组件中 props 的属性不能在子组件中改变其值然后传出至父组件了,但是有的时候也会存在一些麻烦,比如我们想要实现一些自定义组件,总是会有值的传入传出改变的,比如我希望做一个 popup,那么肯定需要根据父节点的状态来确定子节点。
尽管官方推荐双向数据流,但还是有一些方法避免报错,实现或 hack 双向数据流:
最简单的当然是通过状态管理来管理我们的变量,但对于数据流不复杂的父子节点交互而言,未免太过浪费,因此通常我们不会特别的去考虑它,尤其是 popup / checkbox 这种基础组件的时候。
Object 的值是其内存地址,只改变 Object 内部的值不改变地址将不会出现报错。
今天有一个需求,需要给原来的列表加自定义拖拽排序,之前做过一个原生的 demo,还发了一篇:HTML5 Drag & Drop 入门。
不过我们也没必要重复造轮子,在 Vue 下面有个 Vue.Draggable 可供我们直接使用。
做项目的时候遇到过需要将静态资源长期缓存的情况,因为在我们的需求里,最初一个静态资源上传完毕,针对此链接一次发布终生受益——于是乎,是时候研究一波缓存策略了:
我们都知道缓存状态码:304 Not Modified. 然而实际上,命中缓存也不一定是 304 的。
我们这里先要说明 HTTP Response 头中的 cache-control
的几种不同类型或者说关键词:no-cache
/ no-store
/ public
/ private
/ max-age
。
最近在做 Chrome 插件的高级功能,突然想要试试可视化选择 key 的路径,再一想,咦,这不就是个编译原理的典型例题吗?
于是我就开始着手学编译原理了,主要参考 dalao 的以下两篇文章:
编译原理一共分为四个部分:词法分析,语法(文法)分析,语义分析,代码生成。
词法分析,就是逐个解析之后加上词性,语法分析则是将词法分析后的结果解析为抽象语法树,语义分析是在语法分析时针对具体的实例加上额外的动作解释。具体的可以见上面的链接。
在 JSON 的首页有非常完整的词法和语法分析的 token 列表甚至是流程图,所以可以省去了一些劳动。
一直想在毕业之前整理一下相关资源,造福一下学弟学妹嘛。
其实免费的、廉价的资源还是有很多的,完全不必去费劲心机找破解版或者使用便宜不好用的资源,支持正版嘛。
不是所有的 edu.cn 邮箱都能免费秒过的,基本上像我们这样的辣鸡大学还是需要人工绑定邮件,认真填写申请理由(如果不会请去找谷歌翻译)。
认证通过后,你将获得一年的资源使用机会,如果一年之后还需要,请重新申请:
在做毕设的时候,有一个需求,需要把 MongoDB 的数据同步到 ElasticSearch,于是发现了这个 mongo-connector:
mongo-connector 可以把 MongoDB 的数据同步到 Solr、ElasticSearch 或者另一个 MongoDB。
支持 Python 2.6, 2.7, 3.3+ 、 MongoDB 版本 2.4, 2.6, 3.0, 3.2, and 3.4.
其实官方 Get Started 也挺清楚的,但是用的时候还是会遇到一些非常智障的问题。
本文可能随着 MongoDB 使用技能的增长而更新,因为 aggregate 可以做的事情太多啦。
在 MongoDB 中,最强大的工具无异于 aggregate,aggregate 接受一个数组,数组的每一项都是管道(pipeline)对象。
管道的概念我们在 Linux 中也遇到过,可以把前面的返回值作为后者的输入值操作。
仔细说起来这周发布的插件已经是我做的第三个插件了,不过前两个都没有发布(更没有人用),稍微总结一下 Chrome 插件开发中的一些问题。
Chrome 插件这种老东西至今已经有很完整的中文文档了:https://crxdoc-zh.appspot.com/extensions/getstarted