`
donnki
  • 浏览: 45233 次
  • 性别: Icon_minigender_1
  • 来自: 火星
文章分类
社区版块
存档分类
最新评论

chrome插件技术开发总结

阅读更多
这也是一个总结贴,关于最近一个月来利用空余时间写的chrome插件的方方面面。


12月初第一个周六上午在浏览豆瓣时心血来潮想写chrome插件,因为之前有在豆瓣为网页写一些零碎的JS脚本(豆瓣是内置使用jquery的),来实现一些特殊的比如“只看楼主”、“批量上传/下载图片”等等之类的JS脚本,在初略的读了下chrome插件的开发文档的getting start tutorial以后,决定把之前写的那些JS脚变直接变成插件里的某段程序,于是开始研究chrome插件机制及相关的API。


自己写的豆瓣精灵插件google code地址:http://code.google.com/p/douban-demon/,可以通过svn下载全部源代码。包括豆瓣精灵和Rss Snack两个插件,其中前者一直有在慢慢更新,而后者是在一次大学同学技术讨论RSS相关时做的一个快速DEMO来谈插件实现的技术可能性,暂无更新了,不过这个插件使用到了jqueryUI和定制chrome插件鼠标右键的功能,具有一定的参考价值。


以下是chrome插件技术的一些tip总结,更多内容参考官方文档。

关于manifest.json
manifest.json故名思义,是用来管理整个插件的核心配置文件。包括插件的权限设置、名字、版本号、以及所有用到的资源,都需要在这里面指定,下面是豆瓣精灵的manifest.json:
{
  "name" : "豆瓣精灵",   //extension名称
  "version" : "1.6.0",   //版本号(自动更新时需要用到)
  "update_url": "http://douban-demon.googlecode.com/svn/updates.xml",  //自动更新时的对比配置文件
  "description" : "【豆瓣精灵】有什么问题或意见或建议,请联系russell.liuyi@gmail.com,或豆瓣ID:http://www.douban.com/people/3811658/",
  "options_page": "html/options.html",   //选项页面。可以在扩展程序——选项里访问到的
  "permissions": ["tabs", "notifications","http://*/*", "https://*/*"],  //插件访问权限,tabs是指打开的标签页,notifications是指桌面弹出窗口,其它两个是可以访问的链接地址。
  "background_page" : "html/background.html", //后台运行的页面,所有的跨域请求应该放在这里面执行。
  "page_action" :  //插件小图标的一些相关配置
  {
    "default_icon" : "image/demon-19.gif",
    "default_title" : ""
  },
  "content_scripts" : [  //content_script.js只对哪些页面生效、需要哪些JS文件
    {
      "matches" : [
        "http://*.douban.com/*",
	"http://api.t.sina.com.cn/oauth/*"
      ],
     "js": ["js/jquery.js","js/jquery-ui.js", "js/contentscript.js"],
      "run_at" : "document_idle",
      "all_frames" : false
    }
  ],
  "icons" : { 
    "48" : "image/demon-48.gif"
  }
}



关于插件自动升级
需要提供一个xml文件,用于记录升级的配置属性。
需要指定一个appid,对应于生成的chrome插件唯一ID(记住是加上了.pem文件一起打包扩展程序的ID,而不是开发版的ID),以及下载地址、版本号,以下是豆瓣精灵的例子:
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='hldoefihoaojobhlpfmnkjodjkmpicha'>
    <updatecheck codebase='http://douban-demon.googlecode.com/files/DoubanDemon-v1.6.0.crx' version='1.6.0' />
  </app>
</gupdate>


关于跨域提交请求
chrome浏览器禁止跨域提交ajax请求(除非是jsonp方式),但是在插件的backgroupd页面是可以直接跨域提交ajax请求的!比如说如果想在contentscript.js中在豆瓣的页面访问新浪微博的链接,这样是不行的,chrome会提示你禁止访问,这个时候需要把它放到background.html中来做。
另外要注意的是,有些网站跨域提交POST数据被直接被禁止,所以需要使用这些网站提供的API来实现对应的功能,验证方式建议可以的话 尽量使用oauth一劳永逸的方式。

关于localStorage
可以让程序员来编程存储用户浏览器数据,也就是说用户就算关闭浏览器,下次再打开时,localStorage的数据仍然存在。但是如果用户执行了清理所有浏览器数据及cookie时,存在localStorage里的数据将消失。
每个网站都有自己的localStorage存放在chrome缓存中互不冲突。而插件仍然也保存了一份不冲突的localStorage。也就是说:如果在豆瓣的contentscript.js中执行对localStorage的操作,只能取到豆瓣的localStorage,而无法取到插件的localStorage,如果要执行对插件的localStorage的读写操作,需要使用chrome的chrome.extensions.sendMessage()来存取。
另外,localStorage只能存二维数据。但是可以通过JSON.parse(normalString)来让它解压更复杂的json数据,相应的可以通过JSON.stringify(jsonString)来序列化一串JSON数据。

关于oauth协议
OAuth协议的详细内容可以参考RFC文档或者oauth官方网站的文档,以下我在研究过程中能记得的一些小TIP:
官方OAUTH文档是说所有的OAUTH实现应该可以放在HTTP HEADER或者POST FORM或者URL GET中,但是很多网站提供的AIP都只支持其中一种,比如豆瓣和新浪的api是放在http header中,而腾迅微博的API的OAUTH数据是只能附加上URL上做为GET的请求数据。这个需要仔细查看对应网站的API文档,以免走错路。
计算签名时,有些数据是必须放到basicString中做为签名的一部分来签名的,比如说新浪微博的发表新微博,需要把发表的内容转码后以status作为KEY,内容作为value成为basicString的一部分,然后再计算签名。此外签名时参数的顺序也不能错。否则会出现签名认错失败的情况。
虽然很多网站的API OAUTH认证的文档写得不详细,但是容易出错的地方还是可以到他们的网站上找到的,一旦出错了,先到文档上找找是不是有什么特别的提示,这样可能可以更快的发现错误。
1
3
分享到:
评论
1 楼 maddemon 2014-09-06  
不错,学习啦

相关推荐

    Chrome插件开发.pdf

    Chrome插件开发.pdf

    Chrome插件开发

    这是有关Chrome插件开发的文档。掌握HTML、JavaScript技术就可以开发chrome插件。

    Chrome扩展及应用开发.pdf

    Chrome浏览器扩展插件的开发技术文档

    chrome_exts:chrome浏览器插件开发demo合集

    chrome浏览器插件开发demo合集 可食用插件 项目名 简介 使用的技术 my_rightkey_plus 可以自定义的快捷搜索 localStorage,contextMenus,扩展通信 WebPage_Marker 对网页进行拉黑,收藏,打标签 localStorage,...

    Chrome获取MAC地址扩展程序

    实现chrome获取MAC地址的扩展。 通过c++获取MAC地址,然后通过Chrome native message 技术调用C++程序,在javascript中获取MAC地址

    Firefox和Chrome扩展开发

    这是关于Firefox和Chrome扩展开发技术,此文档详细介绍了利用java技术开发Firefox和Chrome浏览器插件的一些问题

    谷歌 apps插件开发实例

    chrome apps插件开发 web开发的桌面应用

    web前端常用chrome谷歌浏览器扩展插件

    FeHelper简直就是前端开发人员的神器,它是由国人开发的一款前端工具集合的小插件,插件功能齐全,基本上涵盖了前端从业者经常会使用到的基础功能,使用起来也很顺手。 Wappalyzer展示你访问的网页由什么技术栈所...

    海康视频监控 hik chrome 谷歌浏览器 二次开发 sdk 非ie

    Chrome浏览器视频插件(采用PPAPI技术)内部调用视频平台OCX完成功能,所以Chrome浏览器视频插件的运行依赖于视频平台OCX,接口也依赖于视频平台OCX的接口。 Chrome浏览器插件支持32位Chrome和64位Chrome,安装插件时...

    海康威视 摄像头网络摄像头 WEB无插件开发包 Web 3.2控件开发包

    web 3.2无插件 是使用websocket 的相关技术 , web 3.0 插件版是使用了 浏览器的npapi 技术 内容简介 Web 控件 V3.2 基于 ActiveX 和 NPAPI 开发,接口封装于 javascript 脚本,以 javascript 接口形式提供用户 集成...

    npapi chrome截屏源码

    chrome的截屏插件 用的是npapi技术开发 支持谷歌chrome 火狐 360等浏览器

    旧版浏览器支持 | 谷歌(Chrome)浏览器插件

    高效开发 Chrome插件 【插件安装教程】 请下载文件后先解压,然后进入页面: chrome://extensions/ 将文件拖拽到该页面,完成安装。 具体步骤: https://t.csdnimg.cn/NxMv 【热门插件】 ·CSDN 浏览器助手:...

    Wappalyzer | 谷歌(Chrome)浏览器插件

    高效开发 Chrome插件 【插件安装教程】 请下载文件后先解压,然后进入页面: chrome://extensions/ 将文件拖拽到该页面,完成安装。 具体步骤: https://t.csdnimg.cn/NxMv 【热门插件】 ·CSDN 浏览器助手:...

    WhatRuns | 谷歌(Chrome)浏览器插件

    高效开发 Chrome插件 【插件安装教程】 请下载文件后先解压,然后进入页面: chrome://extensions/ 将文件拖拽到该页面,完成安装。 具体步骤: https://t.csdnimg.cn/NxMv 【热门插件】 ·CSDN 浏览器助手:...

    chrome.exe

    这项技术是Chrome安全性进步的一座里程碑。对Windows XP用户特别重要,因为它是平台上唯一提供Flash嵌入沙盒运行的浏览器。从8.0版本起,“Google Chrome”内置在沙盒中独立运行的PDF阅读器。 多进程...

    Firefox插件开发概述

    兼容firefox,chrome等非IE核浏览器的插件开发技术npapi概述

    Chrome(谷歌)浏览器 34.0.1847 绿色纯净版.zip

    它的设计超级简洁,使用起来更加方便,Google Chrome支持多标签浏览,每个标签页面都在独立的“沙箱”内运行,在提高安全性的同时,一个标签页面的崩溃也不会导致其他标签页面被关闭,同时也支持扩展插件。...

    Chrome-Charset-master.zip

    这是一款很好的技术人员使用的谷歌插件,插件主要解决技术开发人员,在调试代码时候遇到的中文乱码和其他编码格式乱码的问题。

    Jira-Toast:Chrome插件, Jira二次开发, issue自动提醒

    Jira-Toast Chrome插件, Jira二次开发, issue自动提醒 ##主要功能 ####1、 Jira 任务实时提醒 ####2、定时跟踪 issue列表 ##技术点

    shard-viz:[存档]一个用于可视化MongoDB集群群集的实验性Chrome插件-此存储库不支持MongoDB产品

    在Google Chrome浏览器中,转到“偏好设置”&gt;“扩展程序”,启用开发人员模式,然后单击“加载解压的扩展程序...”。 出现提示时,选择插件目录。 在分片群集中,确保您的配置服务器正在与MongoDB REST接口一起...

Global site tag (gtag.js) - Google Analytics