浏览器鼠标点击的触发事件除了工具栏以外,最为方便的就是右击菜单栏了。同时,Chrome浏览器插件开发也有关于修改菜单栏的API。这里可以自定义自己的菜单。
声明权限
在插件开发中,做很多操作都是需要权限的,如修改历史记录,修改收藏夹等等,这时候就需要声明权限,在manifest.json文件中。
<pre name="code" class="javascript">"permissions": [ "contextMenus" ],这里要注意,申明权限时,只能读取一条permissions,如果需要多个权限,在contextMenus后用“,”隔开,如下面
"permissions": [ "contextMenus" ], "permissions": [ "history" ],这种,就会出现,先申明contextMenus权限,又申明history(读取浏览记录)权限,这时候,history权限会覆盖contextMenus权限,正确的写法是
"permissions": [ "contextMenus","history" ],
创建菜单
创建菜单只需要调用chrome中create方法,chrome.contextMenus.create(Object,function)
chrome.contextMenus.create({'title':'出境游项目',contexts:['all'],id:'inter',documentUrlPatterns:['http://*/*']}); chrome.contextMenus.create({'title':'新后台',contexts:['all'],id:'admin',parentId:"inter",documentUrlPatterns:['http://www.ly.com/*']}); chrome.contextMenus.create({'title':'老后台',contexts:['all'],id:'lineadmin',parentId:"inter",documentUrlPatterns:['http://www.ly.com/*']}); chrome.contextMenus.create({'title':'CN站',contexts:['all'],id:'cn',parentId:"inter",documentUrlPatterns:['http://www.ly.com/*']});
菜单属性一共有如下几项:
type:用于配置菜单项类型有四种(“normal”,“checkbox”,“radio”,“separator”),默认normal
id:菜单项唯一标示
title:菜单显示的中文
checked(boolean):菜单项初始化状态是否为选中
contexts:列出菜单项将会在哪些位置右击出现(“all”所有“page”页面“frame”框架“selection”选定内容“link”链接“editable”可编辑内容“image”图片“video”视屏“audio”音频“launcher”)
parentId:父菜单的唯一标示id,用于添加子菜单
documentUrlPatterns:限制菜单在匹配的url中显示,也就是我上面用到的那个。
enabled:设置菜单是启用还是禁用
修改菜单
调用chrome中update方法
chrome.contextMenus.update(id,Object,function);
id:为要修改的菜单项的唯一id
Object:该参数同上面参数
function:回调方法
删除菜单
调用remove方法,系统菜单神马的可以删不掉的,只能删除自己创建的
chrome.contextMenus.remove(id,function);
id:要删除菜单项的id
function:回调方法
监听事件
菜单创建了,但是功能却没有实现,这时候,我们就需要考虑监听器了,其中有addListener方法,在background文件中加监听事件
chrome.contextMenus.onClicked.addListener(function(info,tab){ if(info.menuItemId === 'admin') { console.log('admin'); } if(info.menuItemId === 'lineadmin') { console.log('lineadmin'); } });
通过唯一id确定选择的项,再进行操作。info.*中参数有:
menuItemId:单机的菜单项唯一标示id
parentMenuItemId:单机的菜单项的父菜单id
mediaType:如果右击是在图片,视屏或者音频上则值对应为“image”,“video”或“audio”
linkUrl:激活的元素是链接,则为链接地址
srcUrl:激活元素src属性指向的url地址
pageUrl:当前打开的页面的url地址
frameUrl:当前框架的url地址
selectionText:当前选中的文本内容(如果有)
editable:是否可编辑
wasChecked:表示单机前当前复选框或者单选框是否是选中状态
checked:表示单机后复选框或者单选框状态
tab.*中参数有:
id:当前标签页id
index:标签页所在窗口索引
windowId:标签页所在窗口的id
url:当前标签页地址
title:标签页标题
(其他的api查吧,太多了。。。)
最后就是这个简单的demo:http://pan.baidu.com/s/1mgMdMek