JavaScript开发Chrome浏览器扩展程序UI的教程


Posted in Javascript onMay 16, 2016

基本知识
1、插件文件结构
1.1、manifest.json
每一个扩展、可安装的WebApp、皮肤,都有一个JSON格式的manifest文件,里面存放重要的插件相关信息。

一个最基本的配置例子:

{
  "name": "browser action demo",
  "version": "1.0",
  "permissions": [
    "tabs", "http://*/*", "https://*/*"
  ],
  "browser_action": {
    "default_title": "开关灯",
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "background": {
    "page": "background.html"
   },
  "manifest_version": 2
}

1.2、popup
插件的弹窗,上面配置中的browser_action中default_popup就是这个页面。

1.3、background page
绝大多数应用都包含一个背景页面(background page),用来执行应用的主要功能。

1.4、Content scripts
通过content script可以使应用和web页面交互,content script是指能够在浏览器已经加载的页面内部运行的Javascript脚本。可以将content script看做是网页的一部分,而不是它所在的应用的一部分。

2、文件之间的交互
popup弹窗中可以直接调用背景页面中的函数。

Content script可以读取并修改当前web页面的dom树,但是它并不能修改它所在应用的背景页面(background)的dom树。

Content script与应用之间的交互:可以互相发送消息

3、为web页面注入JS(Content scripts)文件:
方法一,在manifest.json文件中配置:

"content_scripts": [
  {
   "matches": ["http://www.google.com/*"],
   "css": ["mystyles.css"],
   "js": ["jquery.js", "myscript.js"]
  }
 ],

方法二,通过executeScript():

向页面注入JavaScript 脚本执行。

chrome.tabs.executeScript(integer tabId, object details, function callback)
chrome.tabs.executeScript(tabId, {file: "func.js", allFrames: true});

UI外观
1、browser action:
在chrome主工具条的地址栏右侧增加一个图标。

注意:Packaged apps不能使用browser actions

1.1、manifest.json 中配置
注册browser action:

{
 "name": "My extension",
 ...
 "browser_action": {
  "default_icon": "images/icon19.png", // optional 
  "default_title": "Google Mail",   // optional; shown in tooltip 
  "default_popup": "popup.html"    // optional 
 },
 ...
}

1.2、配置项说明
(1)default_icon
图标 19 *19px

修改browser_action的manifest中 default_icon字段,或者调用setIcon()方法。

chrome.browserAction.setIcon(object details)

设置browser action的图标。图标可以是一个图片的路径或者是从一个canvas元素提取的像素信息.。无论是图标路径还是canvas的imageData,这个属性必须被指定。

(2)default_title
修改browser_action的manifest中default_title字段,或者调用setTitle()方法。你可以为default_title字段指定本地化的字符串;点击Internationalization查看详情。

chrome.browserAction.setTitle(object details)

设置browser action的标题,这个将显示在tooltip中。

(3)Badge
Browser actions可以选择性的显示一个badge— 在图标上显示一些文本。Badges 可以很简单的为browser action更新一些小的扩展状态提示信息。

因为badge空间有限,所以只支持4个以下的字符。

设置badge文字和颜色可以分别使用setBadgeText()andsetBadgeBackgroundColor()。

chrome.browserAction.setBadgeText(object details)

设置browser action的badge文字,badge 显示在图标上面。

setBadgeBackgroundColor

chrome.browserAction.setBadgeBackgroundColor(object details)

设置badge的背景颜色。

(4)default_popup
Popup 气泡提示

修改browser_action的manifest中default_popup字段来指定HTML文件, 或者调用setPopup()方法。

chrome.browserAction.setPopup(object details)

设置一个点击browser actions时显示在popup中的HTML。

1.3、提示
为了获得最佳的显示效果, 请遵循以下原则:

确认 Browser actions 只使用在大多数网站都有功能需求的场景下。
确认 Browser actions 没有使用在少数网页才有功能的场景, 此场景请使用page actions。
确认你的图标尺寸尽量占满19x19的像素空间。 Browser action 的图标应该看起来比page action的图标更大更重。
不要尝试模仿Google Chrome的扳手图标,在不同的themes下它们的表现可能出现问题,,并且扩展应该醒目些。
尽量使用alpha通道并且柔滑你的图标边缘,因为很多用户使用themes,你的图标应该在在各种背景下都表现不错。
不要不停的闪动你的图标,这很惹人反感。

2、右键菜单
您可以选择针对不同类型的对象(如图片,链接,页面)增加右键菜单项。

您可以根据需要添加多个右键菜单项。一个扩展里添加的多个右键菜单项会被Chrome自动组合放到对应扩展名称的二级菜单里。

右键菜单可以出现在任意文档(或文档中的框架)中,甚至是本地文件(如file://或者Chrome://)中。若想控制右键菜单在不同文档中的显示,可以在调用create()和update()时指定documentUrlPatterns。

2.1、manifest.json 中配置
在清单中声明“contentMenus”权限。同时,您应该指定一个16x16的图标用作右键菜单的标识。例如:

{
    "name": "My extension",
    ...
    "permissions": [
     "contextMenus"
    ],
    "icons": {
     "16": "icon-bitty.png",
     "48": "icon-small.png",
     "128": "icon-large.png"
    },
    ...
}

3、桌面通知
通知用户发生了一些重要的事情。桌面通知会显示在浏览器窗口之外。 下面的图片是通知显示时的效果,在不同的平台下,通知的显示效果会有些细微区别。

直-接使用一小段 JavaScript 代码创建通知,当然也可以通过扩展包内的一个单独HTML页面。

3.1、manifest.json 中配置

{
 "name": "My extension",
 ...
 "permissions": [
  "notifications"
 ],
 ...
}

3.2、与扩展页交互:
使用 getBackgroundPage() 和 getViews()在通知与扩展页面中建立交互

// 在通知中调用扩展页面方法...
chrome.extension.getBackgroundPage().doThing();

// 从扩展页面调用通知的方法...
chrome.extension.getViews({type:"notification"}).forEach(function(win) {
 win.doOtherThing();
});

4、Omnibox
omnibox 应用程序界面允许向Google Chrome的地址栏注册一个关键字,地址栏也叫omnibox

必须在 manifest 中包含omnibox 关键字段。需要指定像素为16x16的图标,以便当用户输入关键字时,在地址栏中显示。

4.1、manifest.json 中配置

{
 "name": "Aaron's omnibox extension",
 "version": "1.0",
 "omnibox": { "keyword" : "aaron" }, 
 "icons": { 
  "16": "16-full-color.png" 
 }, 
 "background_page": "background.html"
}

Chrome 自动创建灰度模式16x16像素的图标。你应该提供全色版本图标以便可以在其他场景下使用。

5、选项页
为了让用户设定你的扩展功能,你可能需要提供一个选项页。如果你提供了选项页,在扩展管理页面 chrome://extensions上会提供一个链接。点击选项链接就可以打开你的选项页。

5.1、manifest.json 中配置

{
 "name": "My extension",
 ...
 "options_page": "options.html",
 ...
}

6、覆写特定页
使用替代页,可以将Chrome默认的一些特定页面替换掉,改为使用扩展提供的页面。

6.1、manifest.json 中配置

{
 "name": "My extension",
 ...

 "chrome_url_overrides" : {
  "pageToOverride": "myPage.html"
 },
 ...
}

7、Page Actions
使用page actions把图标放置到地址栏里。

想让扩展图标总是可见,则使用browser action。

打包的应用程序不能使用page actions。

7.1、manifest.json 中配置

{
 "name": "My extension",
 ...
 "page_action": {
  "default_icon": "icons/foo.png", // optional 
  "default_title": "Do action",  // optional; shown in tooltip 
  "default_popup": "popup.html"  // optional 
 },
 ...
}

7.2、配置项说明
同browser actions一样,page actions 可以有图标、提示信息、 弹出窗口。但没有badge

使用方法 show() 和 hide() 可以显示和隐藏page action。缺省情况下page action是隐藏的。当要显示时,需要指定图标所在的标签页,图标显示后会一直可见,直到该标签页关闭或开始显示不同的URL (如:用户点击了一个连接)

7.3、提示
要只对少数页面使用page action;
不要对大多数页面使用它,如果功能需要,使用 browser actions代替。
没事别总让图标出现动画,那会让人很烦。
8、主题
主题是一种特殊的扩展,可以用来改变整个浏览器的外观。主题和标准扩展的打包方式类似,但是主题中不能包含JavaScript或者HTML代码。

8.1、manifest.json 中配置

{
 "version": "2.6",
 "name": "camo theme",
 "theme": {
  "images" : {
   "theme_frame" : "images/theme_frame_camo.png",
   "theme_frame_overlay" : "images/theme_frame_stripe.png",
   "theme_toolbar" : "images/theme_toolbar_camo.png",
   "theme_ntp_background" : "images/theme_ntp_background_norepeat.png",
   "theme_ntp_attribution" : "images/attribution.png"
  },
  "colors" : {
   "frame" : [71, 105, 91],
   "toolbar" : [207, 221, 192],
   "ntp_text" : [20, 40, 0],
   "ntp_link" : [36, 70, 0],
   "ntp_section" : [207, 221, 192],
   "button_background" : [255, 255, 255]
  },
  "tints" : {
   "buttons" : [0.33, 0.5, 0.47]
  },
  "properties" : {
   "ntp_background_alignment" : "bottom"
  }
 }
}
Javascript 相关文章推荐
js计算字符串长度包含的中文是utf8格式
Oct 15 Javascript
使用js声明数组,对象在jsp页面中(获得ajax得到json数据)
Nov 05 Javascript
Javascript基础教程之break和continue语句
Jan 18 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
Aug 24 Javascript
Hallo.js基于jQuery UI所见即所得的Web编辑器
Jan 26 Javascript
JavaScript数据结构与算法之链表
Jan 29 Javascript
Angular下H5上传图片的方法(可多张上传)
Jan 09 Javascript
JQuery EasyUI的一些常用组件
Jul 12 jQuery
node结合swig渲染摸板的方法
Apr 11 Javascript
利用Webpack实现小程序多项目管理的方法
Feb 25 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
May 07 Javascript
vue.js 解决v-model让select默认选中不生效的问题
Jul 28 Javascript
基于javascript实现最简单的选项卡切换效果
May 16 #Javascript
JavaScript实现页面跳转的方式汇总
May 16 #Javascript
js实现页面跳转的几种方法小结
May 16 #Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
May 16 #Javascript
KnockoutJs快速入门教程
May 16 #Javascript
JS学习之表格的排序简单实例
May 16 #Javascript
JavaScript操作选择对象的简单实例
May 16 #Javascript
You might like
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
PHP中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
php获取新浪微博数据API实例
2013/11/12 PHP
jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值
2010/06/28 Javascript
Javascript计算时间差的函数分享
2011/07/04 Javascript
JavaScript中的property和attribute介绍
2011/12/26 Javascript
THREE.JS入门教程(3)着色器-下
2013/01/24 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
jQuery mobile 移动web(4)
2015/12/20 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
vue.js中$set与数组更新方法
2018/03/08 Javascript
Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】
2020/05/13 Javascript
JavaScript/TypeScript 实现并发请求控制的示例代码
2021/01/18 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
python利用正则表达式排除集合中字符的功能示例
2017/10/10 Python
Python3.5 创建文件的简单实例
2018/04/26 Python
Python不使用int()函数把字符串转换为数字的方法
2018/07/09 Python
Django如何实现密码错误报错提醒
2020/09/04 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
python基于opencv实现人脸识别
2021/01/04 Python
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
一份全面的PHP面试问题考卷
2012/07/15 面试题
某公司部分笔试题
2013/11/05 面试题
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
应用英语专业自荐信
2014/01/26 职场文书
家长学校实施方案
2014/03/15 职场文书
产品质量保证书范本
2015/02/27 职场文书
教师思想工作总结2015
2015/05/13 职场文书
幼儿园亲子活动感想
2015/08/07 职场文书
学生会部长竞选稿
2015/11/19 职场文书
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫