在开始编写之前,我们需要先做一点点知识预备:
1、我们之前在讲基础知识的时候有提到browser_action和page_action这两个东西,前者是表示这是一个浏览器行为,其图标显示在地址栏右侧,而后者表示这是一个页面行为,其图标现在在地址栏后面,当然在现在的浏览器上是看不出来这个区别的,他们两个不能同时定义,那么网址二维码生成是一个浏览器行为还是一个页面行为呢?就其行为而论网址二维码生成是将页面的网址生成二维码,所以毫无疑问它应该是一个页面行为。
2、我们需要使用到的API:
1) chrome.pageAction.show 在特定标签特定行为情况下显示页面行为的图标,与之对应的还有chrome.pageAction.hide,在特定标签特定行为下隐藏页面行为的图标,使用方式:
chrome.pageAction.show(tabId); chrome.pageAction.hide(tabId);
2) chrome.tabs.onUpdated 这是一个回调函数,我们需要在tab更新的时候选择是要显示还是隐藏页面行为的图标。
chrome.tabs.onUpdated.addListener(function(tabId, info) { chrome.pageAction.show(tabId); });
3) chrome.tabs.getSelected 获取当前选中的选项卡的明细。
由于上面使用了tabs相关API,别忘记需要在manifest.json中申请tabs权限。
3、网址生成二维码选择直接调用api,这里选择使用联图的API:
http://qr.liantu.com/api.php?bg=f3f3f3&fg=ff0000&gc=222222&el=l&w=200&m=10&text=http://www.deanhan.cn
在了解了上面的基础点之后,是时候展示真正的技术了,首先规划一下目录结构:
- QRcode - images - icon-48.png - js - background.js - popup.js - manifest.json
核心文件manifest.json代码:
{ "name": "二维码生成器", "version": "1.0", "description": "二维码生成器", "manifest_version": 2, "icons": { "16": "images/icon-48.png", "48": "images/icon-48.png", "128": "images/icon-48.png" }, "permissions": ["tabs", "https://*/*", "http://*/*"], "background": { "scripts": ["js/background.js"] }, "page_action": { "default_popup": "popup.html" } }
popup.html的代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Popup</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <div id="contain"> <img src="" alt="" id="qrcode"> </div> <script type="text/javascript" src="js/popup.js"></script> </body> </html>
popup.js的代码如下:
var imgNode = document.getElementById("qrcode"), prefix = "http://qr.liantu.com/api.php?bg=f3f3f3&fg=ff0000&gc=222222&el=l&w=200&m=10&text="; chrome.tabs.getSelected(function(w) { var url = w.url, img = new Image(); img.src = prefix + url; img.onload = function() { imgNode.src = this.src; imgNode.style.display = "block"; } });
背景页background.js的代码如下:
chrome.tabs.onUpdated.addListener(function(tabId, info) { chrome.pageAction.show(tabId); });
运行截图:
插件源码下载