转载请注明出处:http://blog.csdn.net/zhymax/article/details/8552830

上网时经常在多个搜索引擎间切换,但使用chrome自带的搜索引擎切换比较麻烦,换一个引擎就需要设置一次配置,因此也在chrome应用商店找了多个搜索扩展程序,使用下来都是各有优点,但不能同时具备我想要的功能,例如菜单项分组、划词搜索、添加自定义搜索或是不同电脑间同步配置,多少都有点缺憾,所以决定自己动手丰衣足食,实现一个右键菜单扩展程序,基本特性如下:

  • 右键菜单搜索
  • 页面划词搜索
  • 菜单分组显示
  • 自定义添加搜索引擎
  • 同步配置

代码下载
  csdn资源:http://download.csdn.net/detail/zhymax/5038605
  github:https://github.com/lo0kup/ContextSearch

chrome应用商城扩展地址,欢迎大家安装试用:  Context Search

扩展程序效果图:

下面对代码实现做个介绍

1 在chrome右键上下文菜单增加自定义菜单项

使用chrome.contextMenus.create创建上下文菜单。

1) 创建主菜单项

var context = "selection";
var id = chrome.contextMenus.create({"title" : J.NAME,"id" : "c" + context,"contexts" :[context]});

"title": 菜单项显示标题
"id": 菜单id
"contexts": 设置菜单对应的操作内容,可以设置一个或多个内容:
                    ["all", "page", "frame", "selection", "link", "editable", "image", "video", "audio"] 
                    本扩展程序使用"selection",也就是当前选择的文本。
本菜单项不响应操作事件。

2)  创建分组菜单

catalogId = chrome.contextMenus.create({"title" : catalog,"id" : "c" + catalog,"contexts" : [context],"parentId" : id});

parentId: 与创建主菜单方式相比多了一个"parentId"参数,说明父菜单项的id,也就是主菜单项的id;
本菜单项不响应操作事件。

3) 创建子菜单项

chrome.contextMenus.create({"title" : J.SEARCHENGINES[i].ID,"id" : i.toString(),"contexts" :[context],"parentId" : catalogId,"enabled" : J.SEARCHENGINES[i].ENABLE,"onclick" : onClickMenu});

"enabled": 表示菜单项是否可用;
"onclick": 表示该菜单项的点击事件处理函数,当该子菜单项点击时onClickMenu()函数被调用。

2 页面划词搜索

需要在页面加载时加载context.js,增加鼠标操作的监听。
监视页面鼠标左键点击动作,当鼠标左键mouseup事件产生时显示搜索菜单。

document.addEventListener("mouseup", function() {...// 只处理鼠标左键,其他键按下时如果有菜单,则删除菜单if (event.button != 0){if(searchMenu){document.body.removeChild(searchMenu);}return;}...// 读取配置,创建菜单chrome.extension.sendRequest({cmd: 'get_options'}, function(opts) {createSearchMenu(opts, x, y);});
});

菜单动态创建。

3 菜单分组

扩展程序使用JSON格式的配置:
{"CATALOG":"","ID":"Google(安全)","URL":"https://www.google.com.hk/search?q=%s","ENCODE":false,"ENABLE":true}
CATALOG 类型说明菜单分组,包含以下项:

  • 空字符: 表示不分组,直接是主菜单的子项;
  • -:  表示菜单分隔符;
  • 字符串: 表示分组名称;

4 同步配置

使用sync同步到服务器,需要gmail帐号登录同步。
另外保存配置时如果长度超出QUOTA_BYTES_PER_ITEM限制,需要分片保存。
var Storage = chrome.storage.sync;// 保存配置到Storage,超过QUOTA_BYTES_PER_ITEM需要进行分片保存。
function setOptions(opts, cb)
{var optionStr = JSON.stringify(opts);var length = optionStr.length;var sliceLength = Storage.QUOTA_BYTES_PER_ITEM / 2; // 简单设置每个分片最大长度,保证能存储var optionSlices = {}; // 保存分片数据var i = 0; // 分片序号// 分片保存数据while (length > 0){optionSlices["cs_options_" + i] = optionStr.substr(i * sliceLength, sliceLength);length -= sliceLength;i++;}// 保存分片数量optionSlices["cs_options_num"] = i;// 写入StorageStorage.set(optionSlices, cb);//console.log(optionSlices);
}

创建chrome右键菜单划词搜索扩展相关推荐

  1. 利用Java实现PC端的划词搜索

    项目介绍 全局划词搜索,可实现PC端在任意界面(almost)选中文字后,使用快捷键快速搜索该文字,需配合Windows批处理文件使用. 软件架构 Spring Boot 软件思路 首先明确一下我的需 ...

  2. 每次打开百度太麻烦?用程序直接打开网页 Python实现百度划词搜索功能(获取剪切板数据)

    浏览顺序 实现划词功能 运行错误 解决问题 转载声明 实现划词功能 说是划词翻译,实际上我们是通过获取用户的剪切板内容,通过一系列的操作得到的.首先呢,我们就先实现如何获取剪切板内容的程序 首先先在桌 ...

  3. QQ2010 SP1新版划词搜索功能演示

        官方网http://im.qq.com/qq/2010/standard_sp1/###站:其主要功能可以在聊天窗口右边显示广告位,不用打开浏览器不占用电脑内存,方便边搜边聊. 站长之家Chi ...

  4. 有道词典的划词搜索功能加入生成的百度链接

    项目:在<有道词典>的划词搜索里增加百度搜索链接. 概述:有道词典有几个版本增加一个功能,在划词后,可以查看有道网页搜索的结果,很方便.6以后的版本这个功能消失了,所以一直在使用5.X版本 ...

  5. JavaScript特效:划词搜索

    <html> <head> <title>划词搜索</title> <meta http-equiv="Content-Type&quo ...

  6. 划词搜索被ewido视为高风险Adware.wSerarch

    划词搜索被ewido视为高风险Adware.wSerarch Lanno Ckeeke 2006-5-7 划词搜索安装程序名称: PHCSetup.exe 若在上网时不小心安装了此程序,它会在系统盘的 ...

  7. 如何在网页实现自己的划词搜索

    如何在网页实现自己的划词搜索 近来在网上看到很多,网页里划词搜索的博文.大致都是划词实现GOOGLE或其他搜索引擎的搜索,极大的方便了客户端使用. 但是实现搜索自己的数据库几乎没有论述的.本人略加改动 ...

  8. QQ2010的划词搜索

    不知道你注意到了没有,qq2010的聊天窗口里面已经支持了划词搜索,聊天与搜索的紧密结合,让你倍感惊喜,赶紧来试试吧! 和朋友聊天时,如果出现了搜索需求,选中需要搜索的词,将鼠标放在被选词上,就会出现 ...

  9. 网页划词标记划词搜索功能

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

最新文章

  1. 每日算法练习之下落的小球
  2. Jquery插件使用 焦点图插件 MyFocus ,另外记录一款插件 KinMaxShow大背景图插件。...
  3. Javascript高级程序设计第二版第十二章--Event--笔记
  4. python网球比赛模拟_Python-体育竞技模拟
  5. Katu Puzzle(POJ-3678)
  6. dz安装教程php,discuz论坛安装教程 2017最新discuz论坛安装教程
  7. 整理自己的.net工具库
  8. GIS应用开发AO(1)_普通几何图形绘制
  9. python课设带报告_20192423 2019-2020-2 《Python程序设计》实验三报告
  10. 全局配置_再次强调:必须站在全局的角度去考虑客厅的内机配置
  11. 大一计算机引论知识点,计算机引论知识点2015.doc
  12. 完全卸载vs2008
  13. 编程随想 关系图_邹军:想成为编程工程师,玩透数控宏程序编程,这里有一个大招分享给你...
  14. oracle 导出table数据,导出table数据库数据
  15. 【语义分割】2021-PVT2 CVMJ
  16. 【基础知识①】计算机网络知识
  17. 微信二维码图片长按没有出现“识别图中的二维码”
  18. java 中文编码乱码_Java编码问题复习
  19. 移动安全技术如何未雨绸缪?
  20. windows系统电脑间互传文件

热门文章

  1. 自动检测本地或远程计算机,远程桌面使用本地打印机(权威答案)
  2. 使用JavaScript调用本地打印机
  3. 拿下数据分析Offer之统计学
  4. 前端页面引入外部字体 @font-face 的使用方法
  5. HD-SDI转HDMI转换器怎么连接?hd-sdi转hdmi转换器常见故障有哪些?
  6. 宇视网络视频录像机网页回放界面的合并下载是什么功能?
  7. Linux用户管理篇
  8. 【模拟登录】Pythoncookie17k
  9. python语音控制手机_python 树莓派语音控制普通台灯教程-Python 实用宝典
  10. 后台管理系统移动端适配解决方案