我的第一个chrome插件--划词搜书(2)

2023-11-26 10:20

本文主要是介绍我的第一个chrome插件--划词搜书(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一篇  介绍了我做的第一个 chrome 插件 划词搜书,今天做了一些修改,效果图如下:

 

这篇具体的说下这个插件的实现方式。

第一步:

需要建立一个空文件夹,然后新建一个名字为 manifest.json 的文件,在每一个chrome扩展和可安装的WebApp,包括皮肤,都有一个 JSON 格式的manifest文件,叫manifest.json,里面提供了重要的信息 。如下:    

 1 {2     // Required    3     "name": "My Extension",    4     "version": "versionString",      5     "manifest_version": 2,6     // Recommended    7     "description": "A plain text description",    8     "icons": { ... },    9     "default_locale": "en",      
10     
11     // Pick one (or none)    
12     "browser_action": {...},    
13     "page_action": {...},    
14     "theme": {...},    
15     "app": {...},      
16     
17     // Add any of these that you need    
18     "background_page": "aFile.html",    
19     "chrome_url_overrides": {...},    
20     "content_scripts": [...],    
21     "homepage_url": "http://path/to/homepage",    
22     "incognito": "spanning" or "split",    
23     "key": "publicKey",    
24     "minimum_chrome_version": "versionString",    
25     "omnibox": { "keyword" : "aString" },    
26     "options_page": "aFile.html",    
27     "permissions": [...],    
28     "plugins": [...],    
29     "update_url": "http://path/to/updateInfo.xml"  
30 }  

 

 

其中必填的只有 name名字,vesion版本号和manifest_version,需要注意的是,网上能搜索到的大部分博客所写的 manifest.json 的描述都比较旧,没有提到最后一个manifest_version,在谷歌的最新要求中,manifest文件中,需要把manifest_version标识为2。更多关于 manifest的描述,请参考 谷歌的文档。

在我的插件中,除了必填写的三个以外,还用到了permissions和content_scripts,manifest文件如下:

 1 {2     "name": "划词搜书",3     "version": "1.0.5",4     "description" : "划词搜书。所选的词被书名号包裹或划词后按下d键(douban的首字母),将会返回豆瓣对应的书籍信息。例如:选择《平凡的世界》,5     或者选择 平凡的世界 ,然后按下 d,将会在页面上显示路遥这部经典作品的豆瓣评分,简介和售价",6     "manifest_version": 2,7     "permissions": [8         "https://api.douban.com/*"9     ],
10     "icons": 
11     { 
12           
13       "48": "bookinfo.png"
14     },  
15     "content_scripts": [
16         {
17           "matches": ["http://*/*"],
18           "css" : ["linchao.css"],
19           "js": ["linchao.js"]
20         }
21       ]
22     
23 }

 

1.permissions 用于声明插件所需要的权限有哪些,在这个插件中,我的脚本需要跨域的请求 豆瓣 的api,获取图书的信息,所以把 https://api.douban.com/* 写入其中。用户在安装这个插件的时候,会根据 permissions 所指定的权限给与一定的警告;

2.Content scripts是在Web页面内运行的javascript脚本。通过使用标准的DOM,它们可以获取浏览器所访问页面的详细信息,并可以修改这些信息,简单的说,Content scripts是指在用户浏览网页的时候,也运行于页面的,来自于你插件的代码。文件中,js 和 css指定都显而易见,是插件所对应的js和css文件,而"matches": ["http://*/*"]是指,插件在哪些网页下是生效的,或者说是工作在哪些网站中,这里,我希望 划词搜书 能在每一个页面中使用,所以指定为  ["http://*/*"]。

第二步:

写好manifest文件以后,在同一目录中建立好js和css  文件,就可以开始开发了。

打开chrome的 扩展程序管理页 勾选 开发组模式,然后载入正在开发的程序,指向刚才建立的文件夹,这样,插件就能在chrome中进行开发和调试了。

1.获取鼠标选择的文字信息。

给chrome开发插件有一点是非常舒服的,就是根本就没有前端程序员所痛恨的兼容性问题,而对于chrome而言要获取鼠标选中的文字简直就是太容易了。

var text = window.getSelection();
var bookname = text.toString();

在chrome 和 ff中要获取 鼠标选中的文字,可以使用  window.getSelection() , window.getSelection() 的值console.log出,可以看到还返回了一些dom信息,这里我只需要将返回值toString()就可以拿到鼠标所选择的文字。

2.记录下mouseup时候的指针位置

getBookInfo.mouseupX = e.clientX;
getBookInfo.mouseupY = e.clientY;

用于后续浮层的展示,这里需要注意一个小细节,如果mouseup的位置过于靠右,展开的浮层可能就超出了浏览器的显示范围了(会有横向滚动条),对于这种特殊情况,计算位置的时候可以向左边偏移一些,尽量不要有横向滚动条的出现。

3.请求 豆瓣的api  获取书籍信息

这里就用到了,manifest里面申请的,跨域ajax请求了。

豆瓣api2.0非常简单明了

首先,需要根据书名来搜索书籍

只需要构造一个ajax请求,q值就是 1中获取到的鼠标文字,成功以后豆瓣会json格式返回最多20条的搜索结果,记录下这20个书籍信息,因为搜索返回的信息中,并没有我需要的书籍评分信息,所以需要根据id去请求每本书的具体信息。

获取书籍具体信息的接口也非常简单:

根据返回的信息,拿到书的 评分,点评人数,书名,作者,简介,标签和售价,生成dom,并绑定好对应的事件:

a.浮层中的上一本,下一本;

b.浮层的消失逻辑,再次选取文字时候小时,鼠标点击body时候消失等

就可以根据2中获得的mouseup的X Y值,来生成dom插入到页面中了,

 

到这里,这个插件计算基本开发完成了。

 

第三步:

写完的东西,自然是把他发布出去,这里要做两个事情:

第一,将应用发布到chrome应用网上应用商店,初次发布应用,要一个$5美元的费用信用卡费用,同时会扣除一个$1  的预授权,不过这个后面是会退还的。

出乎我意料的是,原来chrome的发布应用是没有任何审核的,发布后就生效了,这里我对各个新闻审核,应用审核表示遗憾,不过在短时间内搜索不到,可能是有一个延时。

chrome的发布时候,对图片的要求很严格,必须满足特定的大小:

 

 

 - -!像我这种,不会PS的人,只好对图标表示遗憾了。争取以后补上吧。

第二,申请豆瓣的appkey,这里,比较有趣的是,我选择了先发布chrome后申请id,因为,在申请豆瓣appkey时候需要填写应用地址,所以先发布,才有地址,而且豆瓣的api的限制其实足够满足我测试使用,(不需要授权公开api可以使用http,参数里面如果不包含apikey的话,限制单ip每分钟10次,带的话每分钟40次。带apikey的例子为: http://api.douban.com/v2/user/1000001?apikey=XXX, XXX为你的apikey)。豆瓣的申请也是非常简单,填写好几个必备的内容之后,提交审核即可。这里有个小插曲,我的第一次提交被拒绝了,但是没给我原因,于是我点了下再次提交审核,5分钟以后就告诉我通过了,不知道为什么。。

 

最后的总结:

爱上网,爱chrome,欢迎使用我的插件 : 划词搜书 ,有任何问题,请和我联系,谢谢。

转载于:https://www.cnblogs.com/linchao/archive/2012/12/15/2819812.html

这篇关于我的第一个chrome插件--划词搜书(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/425527

相关文章

Python如何使用seleniumwire接管Chrome查看控制台中参数

《Python如何使用seleniumwire接管Chrome查看控制台中参数》文章介绍了如何使用Python的seleniumwire库来接管Chrome浏览器,并通过控制台查看接口参数,本文给大家... 1、cmd打开控制台,启动谷歌并制定端口号,找不到文件的加环境变量chrome.exe --rem

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

zeroclipboard 粘贴板的应用示例, 兼容 Chrome、IE等多浏览器

zeroclipboard单个复制按钮和多个复制按钮的实现方法 最近网站改版想让复制代码功能在多个浏览器上都可以实现,最近看网上不少说我们的代码复制功能不好用的,我们最近将会增加代码高亮等功能,希望大家多多支持我们 zeroclipboard是一个跨浏览器的库类 它利用 Flash 进行复制,所以只要浏览器装有 Flash 就可以运行,而且比 IE 的

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

Spring Roo 实站( 一 )部署安装 第一个示例程序

转自:http://blog.csdn.net/jun55xiu/article/details/9380213 一:安装 注:可以参与官网spring-roo: static.springsource.org/spring-roo/reference/html/intro.html#intro-exploring-sampleROO_OPTS http://stati

eclipse安装subversion(SVN)版本控制插件

陈科肇 查看插件更新站点 网址:http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA 网站截图: 根据自己的eclipse版本,选择需要的更新站点. 使用eclipse集成subservion插件 Help > Install New Software…> 等待下载安装插件…

Weex入门教程之2,Android Studio安装Weex插件

插件位置及描述 https://plugins.jetbrains.com/idea/plugin/8460-weex 貌似对windows还不是很支持,先放着吧。 安装 插件功能 先预览下都有什么功能 安装完成Weex插件后,如果在main toolbar找不到这些功能图标,那么就需要手动添加到main toolbar 添加到main toolbar 红框内就是