Chrome扩展开发指南(转载)
2015-09-24 11:51
267 查看
我觉得不错的学习路径:
【基础部分】
JS/CSS,JQUERY,这三个先学,JS则是那本【JAVASCRIPT高级编程第三版】比较不错,然后可以学COFFESCRIPT,来写面向对象的程序。不过我一直不太会写OO的东西,所以,总是用组件化的方式绕过去的。
然后可以试试用所谓的测试驱动来进行迭代开发吧,我因为开发的都是小插件,所以,就懒得写测试了。
然后就是HTML5的所有API,File API/剪贴板的API/Audio API/Storage API/DOM的新变化等等。有兴趣的还可以看看WebGL,CSS3川死佛母什么的。
【API部分】
接下来看官方的教程就可以了,主要的开发模型其实很简单就是background.html,与content.js或者是popup.html或者是options.html这几个页面之间的通讯。
结合上一篇的插件开发总结(http://www.douban.com/note/220782135/),建立的路线可以是,写好ActivX插件一份。写好NPAPI插件一份(最好还是用FireBreath来写,当然,前提是不在于footprint的大小)。然后结合着扩展来进行开发,这是后话。
当然还可以把重度的API交给PEPPER API来搞定,但是注意PEPPER API当下也有许多问题。
【Web Worker】
CHROME的Web Worker能力比其他的强那么一些,简单的说,它可以传指针给WORKER,主线程和WORKER线程之间可以共享内存,说白了就是。
NODE.JS的V8其实也继承了这个能力
【调试】
尽可能得用console.log就可以了,这是要注意几个小问题
1、background.html和popup.html里写的log你是直接看不到的,它们相当于是另一个网页,所以需要使用通讯方式将信息发到某个页面然后LOG,你才能比较好的看到。
2、可以使用JS高级编程第二版里的track技巧,(这其实也是一种安全上的攻击技巧)
<img src='yourtrack.php?get=???'/>这类的东西来集中记录信息
3、还有就是注意一个细节,你在扩展开发页面里,点击重载?那有时候并不会有用的,特别是在你的manifest.json文件变更了的情况下,最佳实践是:关闭/启动。这样你才管事儿,然后用我下面提到的关于插件开发的插件里的小工具重载插件就可以了。
【关于插件开发的插件】
1、快速重载插件的插件
这是我个人使用的一个小工具,最近打算加一些功能,是开发过程中比较好用的小工具
https://github.com/lemonhall/extension-reloader
使用:简单的说就是在开发人员工具里,得到你正在开发插件的唯一ID后,输入到这个插件bg.html里,然后首先重载这个extension-reloader,然后在开发的过程中,你只需要点击右上方那个角落里的CHROME图标,就可以重载你指定ID的插件了。
接下来我有时间了,会改进这个东西,加一个popup.html,让设置的过程更友好一些。
【对通讯模型的封装】
https://github.com/attachmentsme/Queuebert
实验性的项目,对网页间的通讯进行了简单的封装,也许让你写起来更舒服,另外可以通过这个封装,在background.html集中向某个前台的tabid发送console.log信息,因为你要注意,background.html的console.log信息是不会在前台看得到的。
【关于跨域的那点小事儿】
跨域从来都是恶心人的问题,让我看来互联网如此割据的首要因素啊,当然,安全还是要考虑的。
1、JsonP
这个是非常著名的问题,不仅仅是扩展开发者,而且是所有JS都需要面对的问题。
这个东西需要服务器端支持,或者可以用NGINX将对方的服务包装,或者是LIVE截取后动态加上[]号,然后加上CALLBACK来使用,方法很多,这是调用对方接口你必然会遇到的。
2、IFRAME拒绝加载
http://code.google.com/p/chrome-page-compare/source/browse/trunk/src/x-frame-options-workaround.js?r=10
使用WebRequest直接修改对方的HTTP头信息,就可以了。
【编译C++并移植】
https://github.com/kripken/emscripten/wiki/_pages
用Emscripten项目,这个项目对文件系统做了一层抽象,另外对移植SDL以及OPENGL库很有用。
这不是我的领域,就不多说了。
【关于WebRTC】
当下的WebRTC还处于草案阶段,我个人最关心的是Data API部分,可以无痛穿墙,传输数据。
视频/音频,的VoIP相关开发人员应该关注这些。http://webp2p.org/
【Storage API】
http://brian.io/lawnchair/adapters/
对当下的所有的storage做了一个简单的封装,你不一定需要用它,但可以翻看一下源代码,看看它为了照顾兼容性所作出的,卓越的努力。
【DHT】
http://kadoh.fr.nf/
之所以把它加进来是,因为最近非常感兴趣这个DHT技术。有兴趣可以一起看看,可以给扩展增加访问DHT网络的能力(当然不是扩展也可以)
【基础部分】
JS/CSS,JQUERY,这三个先学,JS则是那本【JAVASCRIPT高级编程第三版】比较不错,然后可以学COFFESCRIPT,来写面向对象的程序。不过我一直不太会写OO的东西,所以,总是用组件化的方式绕过去的。
然后可以试试用所谓的测试驱动来进行迭代开发吧,我因为开发的都是小插件,所以,就懒得写测试了。
然后就是HTML5的所有API,File API/剪贴板的API/Audio API/Storage API/DOM的新变化等等。有兴趣的还可以看看WebGL,CSS3川死佛母什么的。
【API部分】
接下来看官方的教程就可以了,主要的开发模型其实很简单就是background.html,与content.js或者是popup.html或者是options.html这几个页面之间的通讯。
结合上一篇的插件开发总结(http://www.douban.com/note/220782135/),建立的路线可以是,写好ActivX插件一份。写好NPAPI插件一份(最好还是用FireBreath来写,当然,前提是不在于footprint的大小)。然后结合着扩展来进行开发,这是后话。
当然还可以把重度的API交给PEPPER API来搞定,但是注意PEPPER API当下也有许多问题。
【Web Worker】
CHROME的Web Worker能力比其他的强那么一些,简单的说,它可以传指针给WORKER,主线程和WORKER线程之间可以共享内存,说白了就是。
NODE.JS的V8其实也继承了这个能力
【调试】
尽可能得用console.log就可以了,这是要注意几个小问题
1、background.html和popup.html里写的log你是直接看不到的,它们相当于是另一个网页,所以需要使用通讯方式将信息发到某个页面然后LOG,你才能比较好的看到。
2、可以使用JS高级编程第二版里的track技巧,(这其实也是一种安全上的攻击技巧)
<img src='yourtrack.php?get=???'/>这类的东西来集中记录信息
3、还有就是注意一个细节,你在扩展开发页面里,点击重载?那有时候并不会有用的,特别是在你的manifest.json文件变更了的情况下,最佳实践是:关闭/启动。这样你才管事儿,然后用我下面提到的关于插件开发的插件里的小工具重载插件就可以了。
【关于插件开发的插件】
1、快速重载插件的插件
这是我个人使用的一个小工具,最近打算加一些功能,是开发过程中比较好用的小工具
https://github.com/lemonhall/extension-reloader
使用:简单的说就是在开发人员工具里,得到你正在开发插件的唯一ID后,输入到这个插件bg.html里,然后首先重载这个extension-reloader,然后在开发的过程中,你只需要点击右上方那个角落里的CHROME图标,就可以重载你指定ID的插件了。
接下来我有时间了,会改进这个东西,加一个popup.html,让设置的过程更友好一些。
【对通讯模型的封装】
https://github.com/attachmentsme/Queuebert
实验性的项目,对网页间的通讯进行了简单的封装,也许让你写起来更舒服,另外可以通过这个封装,在background.html集中向某个前台的tabid发送console.log信息,因为你要注意,background.html的console.log信息是不会在前台看得到的。
【关于跨域的那点小事儿】
跨域从来都是恶心人的问题,让我看来互联网如此割据的首要因素啊,当然,安全还是要考虑的。
1、JsonP
这个是非常著名的问题,不仅仅是扩展开发者,而且是所有JS都需要面对的问题。
这个东西需要服务器端支持,或者可以用NGINX将对方的服务包装,或者是LIVE截取后动态加上[]号,然后加上CALLBACK来使用,方法很多,这是调用对方接口你必然会遇到的。
2、IFRAME拒绝加载
http://code.google.com/p/chrome-page-compare/source/browse/trunk/src/x-frame-options-workaround.js?r=10
使用WebRequest直接修改对方的HTTP头信息,就可以了。
【编译C++并移植】
https://github.com/kripken/emscripten/wiki/_pages
用Emscripten项目,这个项目对文件系统做了一层抽象,另外对移植SDL以及OPENGL库很有用。
这不是我的领域,就不多说了。
【关于WebRTC】
当下的WebRTC还处于草案阶段,我个人最关心的是Data API部分,可以无痛穿墙,传输数据。
视频/音频,的VoIP相关开发人员应该关注这些。http://webp2p.org/
【Storage API】
http://brian.io/lawnchair/adapters/
对当下的所有的storage做了一个简单的封装,你不一定需要用它,但可以翻看一下源代码,看看它为了照顾兼容性所作出的,卓越的努力。
【DHT】
http://kadoh.fr.nf/
之所以把它加进来是,因为最近非常感兴趣这个DHT技术。有兴趣可以一起看看,可以给扩展增加访问DHT网络的能力(当然不是扩展也可以)
相关文章推荐
- %1$s %1$d (java & Android 格式化字符串)
- [LeetCode]Compare Version Numbers
- navigationBar translucent
- 上午所学(jvm内存分配和shell排序算法的深入理解)
- easyui tabs中打开新的tabs关闭当前tabs
- easyUI之Form(表单)组件
- 使用 OAuth2-Server-php 在 Yii 框架上搭建 OAuth2 Server
- Keep-Alive简介及在Tomcat中配置
- html Table标签的初步使用
- SAP接口编程-RFC系列01 : RFC Hello World
- 设计模式六大原则(2):里氏替换原则
- 交叉编译glibc
- iOS开发UI篇—Quartz2D使用(图形上下文栈)
- GPUImage
- ubuntu安装mysql数据库
- spark 1.5的hivecontext的问题
- 简单介绍HTML5中audio标签的使用
- 微服务化的感想
- quicksort+binarySearch
- 抓包