转载请注明出处: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. 用每个月的下载量超过300亿次的NPM,窃取密码是一种什什么样的体验!
  2. oracle11g sp 1503,Oracle11g操作ASM权限问题
  3. Kafka入门之分组的理解
  4. 程序员面试金典 - 面试题 16.16. 部分排序(排序/不排序)
  5. mysql Split函数
  6. excel 直接查询企查查数据_企查查数据:我国一次性餐具相关企业八千家,前三季增1209家...
  7. android http请求缓存,android 缓存http请求数据
  8. 2020最新 程序员数学(基础+进阶)
  9. 用pe做2012服务器系统教程,微软WDS网络启动PE做系统的服务器配置和PE修改教程...
  10. ignite mysql_Ignite安装及使用
  11. 事件发生位置的相对性——思想实验推导狭义相对论(二)
  12. chrome为默认浏览器时,解决ftp无法用windows资源管理器打开,而是跳转到chrome打开
  13. python自动排版公众号_请问微信公众号推文如何实现自动排版?
  14. 2022-2027年中国涡桨发动机行业发展监测及投资战略研究报告
  15. AAAI2018-Long Text Generation via Adversarial Training with Leaked Information论文笔记
  16. 自动驾驶领域的Android?百度能否超越特斯拉和谷歌
  17. MySQL入门学习之——实战XtraBackup
  18. 什么是SSL双向认证,与单向认证证书有什么区别?
  19. 【美图】从字符串 com.meitu/mtxx/6.8.0(ios10.2)/lang:zh 中取出6.8.0
  20. python实现自动化统计数据表内容并发送邮件至指定联系人

热门文章

  1. 人工智能相关术语中英文对照
  2. python print用法可以不加引号吗_第一课print() 函数的用法有以下几种:单刀赴会—不带引号...
  3. Failed to initialize end point associated with Protocol Handler
  4. JS常用函数 大全
  5. 网管师与网管员和 网络工程师的区别
  6. 检测工具介绍:Loki的IOCs检测和Pesieve的内存注入检测
  7. 二十一、由四进制计数器制作三进制计数器
  8. ICEM绘制体积网格的基本操作步骤
  9. 网络ghost83企业版+U盘克隆操作实例教程
  10. Java之下载word文档