为什么80%的码农都做不了架构师?>>>   

最近做了个Chrome 扩展 Pomodoro,也就是传说中的番茄计数。这东西市面上不少,chrome store里面一堆,不过试用了一圈都不是很爽,应该说我这个人比较膈应,总是有些怪异的想法,例如:

  • 怎么也得提供两种计数模式吧,我喜欢工作时间使用25分钟来分隔,晚上喜欢长一点,例如45分钟的
  • 如果能像 gtalk 那个扩展那样,在右下角出现多好,而且还可以在所有非chrome窗口之上出现,在浏览器图标上点击出现个popup实在是不利索啊
  • 当然,既可以在右下角出现,又可以切换到弹出窗口状态就更好了
  • 在计时状态下,窗口关闭了也不影响计时
  • ……

嗯哼,这么一限定,剩下的就只能是自己搞了。想自己搞还有一个原因就是:屁大个小东西,能有多麻烦,一两天还不搞定……

这瞧不起人家 chrome 的下场很明显,其它的不说,从主体功能完成——就是下面的小窗口加上配置页面,那个计时器也能跑起来了——到方方面面小bug都找全了,已经是22号到26号了,虽然不是全时间投入,但起码每天也会花上个1-4小时不等的。

下面说说 chrome 扩展开发可能会遇到的一些问题吧。

看上去很美的事件页面

这个事件页面看上去很美,是对之前的background页面的优化。后者是会一直运行着的,无论那个扩展你当时用没用,它会紧密陪伴着chrome,chrome不关它的内存不释放。

使用也很简单,只需要在 manifest.json 的background 部分加个 "persistent": false 就ok了(当然,设置成 true 的话就是传统的后台模式了)。

但是!!!

这个杀进程的机制往往让你不知所措,明明扩展还在后台运行,丫就给你干掉了,这个在开发的时候往往还观察不到,因为你会打开那个 dev panel。导致我把扩展提交到 store之后有用户报bug,说窗口关闭之后计时就失效了。

这个进程卸载机制开发者完全无法控制——反正我没发现控制的办法,有两个监听:onSuspend和 onSuspendCanceled,但是没有提供个机制让你手工控制一下,例如提供个方法来cancel这个 suspend。

为了解决这个问题,一开始的思路是把所有相关数据存到 storage 中去,然后用 alarm 每分钟触发一次,通过读取这些数据来重新初始化对象。结果碰壁,因为这个 alarm 太残废(这个后面专门吐槽)。

最后还是只能依靠传统解决办法:把 "persistent" 设置为 true,然后用 setTimeout 来定时。

于是本来挺好的玩意——可以帮助用户节省内存——却无法适应所有场景。

残废的 Alarm

chrome 官方文档推荐用来做周期性事件触发的是 chrome.alarms,一开始也是用的这东西来做的后台计时,在开发环境下一切正常,触发的时间也很准确,打包扔到 store 再下载下来用发现不对了,丫的这个触发时间极度不可捉摸,每次都得延迟2、30s,再仔细看文档,感情人家已经明确提到了:由于性能原因,定时器可能会延迟至该时间后的任意时间。

如果一个计时器不能按时触发那么还有什么意义?当然也有,如果是时间不敏感的话也还是可以用用的,但是我这个扩展显然不行了。

缺乏完善的扩展页面间的消息传递机制

chrome 虽然也提供了 postMessage 的api,但是这个只能跟 content script 之间互相传递消息,而无法给扩展内的一般页面传递,例如我这个扩展的主窗口是个独立的页面,于是就无能为力了。

这时候最好的方式还是用 storage 来作为消息中转站吧。

结论

我几年前曾经做了个用来发推的小扩展,当时就是恨的咬牙切齿,所以只草草搞了下就算了,没想到几年下来,这个局面依然没有太大改变,虽然 api 增加不少,可惜很多细节仍然很糙。也可以说是 chrome 的扩展机制就不够完善,尤其是与 Firefox 相比。

我一直认为扩展不应该在页面中插入太多内容,但是chrome的 content 处理模式显然是要在客户浏览的页面中插入Javascript和dom节点来解决。导致有时候甚至会破坏用户浏览的页面,但是这时候用户骂的显然不是哪个扩展,而是网站啊。

写到这想到一句话:带着镣铐跳舞!

转载于:https://my.oschina.net/someok/blog/125773

Chrome 扩展 Pomodoro 开发小结相关推荐

  1. chrome扩展(插件)开发(五)监听网页的ajax请求

    我的插件想要监听网页发出的请求, 然后根据请求的状态来做具体的操作. 实现的方法主要有三种方式 google官方提供的api chrome.webRequest 这里在插件中监听宿主页面的ajax 重 ...

  2. chrome扩展程序开发

    首先,明确两个概念的区别:chrome扩展程序和Web Apps.具体参考:http://www.chromi.org/archives/10106 本文只讨论chrome扩展程序. 最好的开发教程莫 ...

  3. Google Chrome 扩展程序开发

    根据公司的规定,每月八小时,弹性工作制.所以大家平时来的不太准时,如果有事,下班也就早些回去了.所以一个月下来工作时间可能不够,但是公司的考勤日历是这样的: 除了请假和法定节假日外,其他样式显示都是一 ...

  4. Chrome 扩展程序开发 Chrome Extensions

    Chrome扩展程序一般都是由JS.HTML.CSS构成.所需要知道的是开发扩展程序要满足的规则. Chrome插件源码结构: manifest.json: 每一个webapp都会有一个JSON格式的 ...

  5. 第55篇 Chrome扩展USB开发(一)及PHP研究 Saturday

    一.php 1.1用户登陆验证 例子如下: 运行结果如下: 1.2 异或运算 真+真=假,假+假=假,真+假=真,假+真=真 二.获取USB数据 本文参考:http://blog.mn886.net/ ...

  6. 开始学习开发Chrome扩展插件

    以下是一个简单的Chrome扩展程序开发的例子: 创建一个新的文件夹并命名为"Chrome-Extension",并添加manifest.json文件,这个叫格式清单文件,在文件中 ...

  7. 一位前端开发者的计算机视觉学习之路——专访《Chrome扩展及应用开发》作者李喆

    李喆从2011年开始接触Chrome扩展程序开发并发布了多款扩展程序,同年10月,他收到了新浪微博前端高级工程师职位的offer,次年4月火狐邀请他参与火狐浏览器扩展开发的工作.现在,李喆是吉林大学电 ...

  8. chrome扩展写法

    最近看到公司同事经常写chrome扩展,来提高生成效率,回想想自己以前也写过chrome扩展,但是由于不经常写,也没做积累也都忘记了,现在重新回顾一下. 一.chrome扩展基本概念 chrome扩展 ...

  9. activex for chrome扩展程序 下载”_提升前端开发效率:你应该知道的10个Chrome扩展程序...

    作者 | Chidume Nnamdi 译者 | 王强 策划 | 李俊辰 "进步不是勤奋者的功劳.它是懒惰者在尝试寻找更简单的方法时取得的成果."  --罗伯特·海因莱因 CSSV ...

最新文章

  1. 【数据结构-学习路线】博文导航与思维导图(计算机考研+期末考试===> 一步到位)
  2. mate7刷android 6.0,华为Mate7 6.0系统刷recovery_Mate7 6.0专用第三方recovery
  3. mysql 存储过程 嵌套if_mysql存储过程if嵌套if的写法
  4. NET问答: Find() 和 Where().FirstOrDefault() 该如何选择 ?
  5. html中的ppt文字不清晰,HTML页面的文字布局与文字效果.ppt
  6. svg mysql_!!!常用SVG代码
  7. Castle ActiveRecord学习实践(7):使用HQL查询
  8. 安装slide后Powerpoint 不自动退出的解决方案
  9. [BZOJ1860][ZJOI2006]Mahjong(DP)
  10. Sitecore 十大优秀功能
  11. TCP 协议面试灵魂 12 问 !
  12. 3D MAX脚本原理
  13. reduce python3_Python3的高阶函数:map,reduce,filter
  14. 苹果手机充电口接触不良怎么办_用了HOU吼猴3C数码配件让手机充电口不再接触不良...
  15. 《数据结构》C语言版(清华严蔚敏考研版) 全书知识梳理 + 练习习题详解(超详细清晰易懂)
  16. 泛娱乐出海走出水土不服,元宇宙社交诞生新机会!
  17. teablue数据分析_京东消费者数据分析
  18. ei指什么_EI是什么
  19. 给asus eeepc 1015pw的 1301版本的 bios添加slic2.1
  20. 基于HTML5的捕鱼达人游戏网页版

热门文章

  1. 【毕业设计】基于微信小程序的在线答题考试系统
  2. Open cv的Canny边缘检测和轮廓检测例子
  3. 微信公众平台开发(34)微相册
  4. mac FileZilla下载与安装
  5. 嵌入式系统开发笔记2:Linux的主流发行版本
  6. 家庭用计算机是一体好还是,国产家用电脑一体机,性能够用就好!!!
  7. oracle 数据库回收站,Oracle数据库的回收站
  8. 参数的点估计问题与矩估计法
  9. 各级国家机关推广应用电子印章相关政策汇总
  10. oracle dba 培训教程 第14章 管理权限