说chrome插件编写的先关文章, 首推小茗的【干货】Chrome插件(扩展)开发全攻略。

有非常完善的理论,引用和demo代码。

但是还是建议看官方的 chrome extensions。

chrome 插件是什么,能做什么

增强浏览器功能,HTML、CSS、JS、图片等资源组成的一个.crx后缀的压缩包。

从界面到网络请求,到本地资源的交互,都是统统可以的。

比如:

  • ColorZilla: 取色工具
  • Octotree: github 项目的右边导航
  • FeHelper: Web 前端助手, json, 二维码,加密等等
  • React Develop tools: React 调试工具
  • Tampermonkey: 油猴脚本

核心五部分

  • Manifest

    声明文件
  • Background Script

    运行在后台的脚本, 当然不仅仅是脚本, 也有html
  • UI Elements

    browser action 和page action, omnibox, popup等等
  • Content Script

    运行在当前内容页面的脚本
  • Options Page

    配置页面

官方资料 (需要翻墙)

你有上面这四个链接, 你基本无所不知,无所不能了。

一个简单的京东商品历史价格查询

本人喜欢在京东买东西,各种活动很累, 很烦。 因为没有比较,就没有伤害。 以后喜欢借助慢慢买查看,但是要来回切换, 麻烦。

其实已经有很多比较成熟的比价插件了。比如

  • 惠惠购物助手
  • 懒人比价购物助手
  • 购物党
  • 淘帮手
  • 等等

但是,个人保持学习态度, 写一个极其简单的,点击一下, 一条曲线。

正题

项目结构

项目结构如下, 本插件核心就是

  • manifest.json 申明文件
  • index.js 执行网络请求,解析数据,渲染图标

manifest

{
//必须为2
"manifest_version": 2,
"name": "JD Price History",
"version": "1.0.0",
"description": "京东商品历史价格查询",
// 右上角图标
"browser_action": {
"default_icon": {
"128": "icons/icon128.png",
"16": "icons/icon16.png",
"48": "icons/icon48.png"
},
"default_title": "检查商品的历史价格"
},
// 脚本
"content_scripts": [
{
"matches": [
"http://*/*",
"https://*/*"
],
"js": [
"content/echarts.common.min.js",
"content/md5.js",
"content/encrypt.js",
"content/index.js"
],
// 运行实际
"run_at": "document_end"
}
],
// 扩展程序网站
"homepage_url": "https://github.com/xiangwenhu",
"icons": {
"128": "icons/icon128.png",
"16": "icons/icon16.png",
"48": "icons/icon48.png"
},
// 权限,其实这里不需要那么多
"permissions": [
"contextMenus",
"tabs",
"notifications",
"webRequest",
"webRequestBlocking",
"storage",
"https://*/",
"http://*/",
"https://*.manmanbuy.com/",
"http://*.manmanbuy.com/"
] }

比较有用的是

  • browser_action 右上角的标
  • permissions 权限,不然你发送请求是不会成功
  • content_scripts 内容脚本

content script

我们调用慢慢买的一个接口, 需要传入类似这样的地址http://item.jd.com/4813300.html,请求这个地址就能获得历史数据, 但是需要引入慢慢买的两个加密文件。

function getRequestUrl(requestUrl) {
requestUrl = requestUrl.split('?')[0].split('#')[0];
var url = escape(requestUrl);
var token = d.encrypt(requestUrl, 2, true); var urlArr = [];
urlArr.push('https://tool.manmanbuy.com/history.aspx?DA=1&action=gethistory&url=');
urlArr.push(url);
urlArr.push('&bjid=&spbh=&cxid=&zkid=&w=951&token=');
urlArr.push(token); return urlArr.join(''); }

封装简单的http_get请求,这里你应该是可以引入jQuery,网上有人说要拦截请求,我这里正常的发送是没有问题的。

function http_get(options) {
var timeout = options.onTimeout
var url = options.url;
var success = options.success;
var error = options.error; var xhr = new XMLHttpRequest();
xhr.timeout = 10000;
xhr.ontimeout = function (event) {
console.log('request url' + url + ', timeout');
timeout && timeout()
}
xhr.open('GET', url, true);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
success && success(xhr.responseText);
}
}
xhr.onerror = function () {
error && error(xhr.statusText)
}
xhr.send();
}

基本发送http请求, 解析数据就好了。

最后发一张图

开发插件本身内容还是很复杂的, 需要慢慢品读。

最后送上源码地址:chromeExt-jd-price-history

写个简单的chrome插件-京东商品历史价格查询的更多相关文章

  1. 接口测试从未如此简单 - Postman (Chrome插件)

    接口测试从未如此简单 - Postman (Chrome插件) 一个非常有力的Http Client工具用来测试Web服务的, 我这里来介绍如何用它测试restful web service 注:转载 ...

  2. 大前端工程化之写一个简单的webpack插件

    今天写一个简单的webpack插件,来学习一下webpack插件 webpack插件机制可以使开发者在webpack构建过程中加入自己的行为,来针对自己项目中的一些需求做一些定制化 首先我们得知道一个 ...

  3. 开发一个简单的chrome插件-解析本地markdown文件

    准备软件环境 1. 软件环境 首先,需要使用到的软件和工具环境如下: 一个最新的chrome浏览器 编辑器vscode 2. 使用的js库 代码高亮库:prismjs https://prismjs. ...

  4. 菜鸟写的第一个chrome插件

    一.新建一个文件夹,用来放插件的代码 二.首先新建配置文件manifest.json // 开发参考:http://open.chrome.360.cn/extension_dev/overview. ...

  5. 写一个简单的JQ插件(例子)

    虽然现在 vue angular react 当道啊但是那 JQ还是有一席之地很多很多的小单位啊.其实还会用到 我也放一个例子吧虽然我也不是很肯定有没有人写的比我更好啊但是我相信 我这个还是蛮实用的 ...

  6. 搜索引擎快捷导航:一个简单的chrome插件(教程)

    一.如何通过练习来提高学习新框架的最好姿势是:基于现有的业务来学习.即从工作中学习,从实践中学.但是,如果一直只使用新的框架来重写旧的业务,成长也会趋近于0.第一次,使用新框架时收获可能颇丰:第二次, ...

  7. 接口测试从未如此简单 - Postman (Chrome插件)【转】

    一个非常有力的Http Client工具用来测试Web服务的, 我这里来介绍如何用它测试restful web service 注:转载请注明出处http://www.cnblogs.com/wade ...

  8. 【干货】Chrome插件(扩展)开发全攻略(不点进来看看你肯定后悔)

    写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均在这个demo里面:https://github ...

  9. 【干货】Chrome插件(扩展)开发全攻略

    写在前面 我花了将近一个多月的时间断断续续写下这篇博文,并精心写下完整demo,写博客的辛苦大家懂的,所以转载务必保留出处.本文所有涉及到的大部分代码均在这个demo里面:https://github ...

随机推荐

  1. Cocoapods 报警告Automatically assigning platform ios with version 9.0 on target....

    Automatically assigning platform iOS with version 9.0 on target 你的工程名称 because no platform was speci ...

  2. Codeforces 38B - Chess

    38B - Chess 思路:懂点象棋的规则就可以,看看哪些点可以放马. 代码: #include<bits/stdc++.h> using namespace std; #define ...

  3. HDU 6106 Classes

    Classes 思路:a中包含的元素:只参加a的,只参加a且b的,只参加a且c的,只参加a且b且c的: b中包含的元素:只参加b的,只参加a且b的,只参加b且c的,只参加a且b且c的: c中包含的元素 ...

  4. Python 爬虫-Requests库入门

    2017-07-25 10:38:30 response = requests.get(url, params=None, **kwargs) url : 拟获取页面的url链接∙ params :  ...

  5. WebAPI获取客户端请求数据

    1.什么是WebAPI,详见:http://www.cxyclub.cn/n/25123/2.一般情况下我们不需要去关心客户端的请求数据,WebAPI会通过自己的方式去将客户端请求的数据转换为实体对象 ...

  6. codeforces 1042d//Petya and Array// Codeforces Round #510 (Div. 2)

    题意:给出一个数组,求其中和小于t的区间数. 先计算前缀和数组sum[i].对当前的sum[i],查询树状数组中有几个比(sum[i]-t)大的数,那么用sum[i]减它就是一个合法区间.再将当前的s ...

  7. webService开发(JDK版)

    最近做社保查询的东西,然而这个是三个公司一起做的,需要调其他公司的接口,他们公司用了webService这个当年比较流行的技术,于是乎就研究了一下这个webService. HTTP协议 + XML方 ...

  8. fzu1901 kmp

    For each prefix with length P of a given string S,if S[i]=S[i+P] for i in [0..SIZE(S)-p-1], then the ...

  9. zzuli1731 矩阵(容斥)

    1731: 矩阵 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 600  Solved: 106 SubmitStatusWeb Board Descr ...

  10. 蓝桥杯--乘积最大(数字DP)

    1230: 乘积最大 [DP] 时间限制: 1 Sec 内存限制: 128 MB 提交: 7 解决: 5 状态 题目描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚 ...