寫個簡單的chrome外掛-京東商品歷史價格查詢
阿新 • • 發佈:2018-12-21
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 配置頁面
官方資料 (需要FQ)
你有上面這四個連結, 你基本無所不知,無所不能了。
一個簡單的京東商品歷史價格查詢
本人喜歡在京東買東西,各種活動很累, 很煩。 因為沒有比較,就沒有傷害。 以後喜歡藉助慢慢買檢視,但是要來回切換, 麻煩。
其實已經有很多比較成熟的比價外掛了。比如
- 惠惠購物助手
- 懶人比價購物助手
- 購物黨
- 淘幫手
- 等等
但是,個人保持學習態度, 寫一個極其簡單的,點選一下, 一條曲線。
正題
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請求, 解析資料就好了。
最後發一張圖
開發外掛本身內容還是很複雜的, 需要慢慢品讀。