`
donnki
  • 浏览: 45863 次
  • 性别: 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 插件开发概述 Chrome 插件开发是指在 Google Chrome 浏览器上开发小程序的过程,这些小程序可以增强浏览器的功能,提供更多的功能和服务。下面是 Chrome 插件开发的基本概念和步骤: 一、基本概念 * ...

    Chrome插件开发3.0

    Chrome插件开发3.0是关于构建和优化Google Chrome浏览器扩展程序的一门技术主题。随着互联网的快速发展,浏览器插件已经成为提升用户体验、增强浏览器功能的重要工具。Chrome作为全球最受欢迎的浏览器之一,其丰富的...

    chrome插件开发文档-详细pdf版.7z

    这份"chrome插件开发文档-详细pdf版"将为开发者提供全面的指南,涵盖从基础概念到高级技术的所有内容。 首先,开发Chrome插件的基础知识包括理解manifest文件。manifest.json是每个Chrome插件的核心,它包含了插件...

    Chrome Extension (Chrome插件)开发官方最新文档(20190401)

    综上所述,开发Chrome插件涉及到多方面的技术,包括前端开发、API调用、权限管理、安全策略等。通过学习官方文档(如chrome_doc),开发者可以深入理解这些概念并创建出满足用户需求的高质量插件。

    ChromeExtensionDocument:chrome插件中文开发文档.zip

    "ChromeExtensionDocument:chrome插件中文开发文档.zip"是一个包含详细中文指南的压缩包,旨在帮助开发者理解并创建自己的Chrome插件。 开发Chrome扩展首先需要了解manifest.json文件,这是每个扩展的核心配置文件...

    Chrome插件开发完整教程

    总的来说,开发Chrome插件是一项结合了Web开发和浏览器扩展技术的工作,对于前端开发者来说,是一个值得学习和探索的领域。通过学习和实践,你可以创建出富有创意和实用性的Chrome插件,为你的网络生活带来便利。

    chrome插件开发文档

    ### Chrome插件开发知识点 #### 一、Chrome插件开发基础概述 - **定义与作用**:Chrome插件(或称扩展程序)是基于Web技术(HTML、CSS、JavaScript等)构建的小型应用程序,用于增强浏览器的功能性。通过安装插件...

    chrome插件-190612.7z

    Chrome插件的开发主要基于Web技术,如HTML、CSS和JavaScript,并通过Chrome的API来访问浏览器的底层功能。开发者可以使用Chrome开发者工具进行调试和测试,然后将插件上传到Chrome Web Store,供全球用户下载安装。...

    chrome浏览器插件开发

    在V3版本中,Chrome插件的开发有以下几个核心知识点: 1. **Manifest文件**:这是每个Chrome插件的配置文件,包含了插件的基本信息,如名称、版本、权限、图标等。在V3版本中,manifest.json文件的结构和要求可能会...

    chrome插件开发-页面对象注入及本地通信

    在本主题"chrome插件开发-页面对象注入及本地通信"中,我们将深入探讨两个关键概念:页面对象注入和本地通信,这两个概念是Chrome插件开发中的重要组成部分。 **页面对象注入** 页面对象注入是指将JavaScript对象或...

    浏览器 chrome 插件开发

    浏览器Chrome插件开发是Web开发领域的一个重要分支,它允许开发者通过JavaScript、HTML和CSS等技术来扩展浏览器的功能,提供个性化的用户体验。Chrome插件,也称为Chrome扩展,是Chrome浏览器的强大特性,可以让用户...

    Chrome插件开发--后台监控网页并自动刷新,点击页面元素

    Chrome插件,全称为Chrome浏览器扩展,是一种基于Web技术(如HTML、CSS和JavaScript)创建的应用程序,可以增强或修改浏览器的功能。在这个特定的案例中,我们关注的是一个能够后台监控网页并自动刷新,以及点击页面...

    chrome插件demo 实现各个类型的js之间的通信

    在Chrome插件的开发中,有多种JavaScript环境同时运行,包括背景脚本(background script)、内容脚本(content script)、选项页面脚本(options page script)以及弹出窗口脚本(popup script)。这些脚本通常不能...

    简单的chrome插件,实现自动登录.

    通过学习和理解这个自动登录的Chrome插件,开发者可以进一步提升对浏览器扩展开发的理解,同时也能掌握到如何利用JavaScript和Chrome API来解决实际问题。这不仅有助于个人技能提升,也为未来创建更多实用的浏览器...

    淘宝自动登录chrome插件

    总的来说,淘宝自动登录Chrome插件是JavaScript与Chrome插件技术结合的典型应用,它展示了如何利用浏览器API来增强网页功能,提升用户体验。通过学习和理解此类插件的工作原理,开发者可以为其他网站定制类似的功能...

    chrome插件js注入网页demo

    这两个标签揭示了主要的技术领域:Chrome插件开发和JavaScript注入。Chrome插件开发涉及HTML、CSS和JavaScript技术,以及使用manifest.json文件来定义插件的元数据和权限。而JavaScript注入则涉及到如何利用Chrome...

    Chrome扩展插件开发Manifest V3案例:把某招聘网站上的招聘信息导出Excel

    这个案例是前端开发者掌握Chrome插件开发的一个实用示例,它涉及到网页数据抓取、数据处理以及与用户交互的多个层面。 首先,我们需要了解**Chrome扩展插件的基本结构**。一个典型的Chrome插件由以下几个部分组成:...

    CSDN_chrome插件

    总的来说,CSDN_chrome插件通过集成多种开发资源,为开发者打造了一个一站式的技术服务平台,使他们在谷歌浏览器中就可以完成大部分开发和学习任务,提升了开发工作的便捷性和效率。对于使用Chrome浏览器的程序员来...

    Chrome插件伴侣.zip

    6. **提高效率**:对于经常需要更换或测试插件的开发人员和高级用户,Chrome插件伴侣简化了这个过程,提高了工作效率,避免了反复手动操作的麻烦。 7. **安全性与隐私**:尽管Chrome插件伴侣提供便利,但用户仍需...

Global site tag (gtag.js) - Google Analytics