天天看點

用Javascript編寫Chrome浏覽器插件

  插件開發流程

  1.開發語言和軟體

  2.設計插件

一個完整的插件是由4個部分組成,分别是manifest.json、.js檔案、圖示和HTML檔案,設計插件就是設計這4類檔案。manifest.json的作用是定義插件的屬性,例如名稱、版本、類型等;HTML檔案具體實作插件的功能;.js檔案是一個跟浏覽器互動的腳本。

  3.載入插件

設計好上面幾個檔案後,就可以将插件載入浏覽器中試用一下。首先将它們整理到同一個檔案夾中,然後在Chrome的工具欄中選擇“擴充程式”,進入擴充管理頁,在右側選擇“開發人員模式”,再點選“載入正在開發的擴充程式”按鈕,定位到這個檔案夾,将整個檔案夾載入Chrome中。

  4.釋出插件

插件試用沒有問題後,不妨将它釋出出去讓更多人使用。首先将插件所在的檔案夾壓縮成一個ZIP檔案(别順手壓縮成了RAR檔案)。然後再到擴充管理頁,點選右下角的“獲得更多擴充程式”連結,進入Chrome官方插件下載下傳頁面,在這個網頁的左下角,你能看到“釋出擴充程式”的連結,點選連結,上傳ZIP壓縮檔案、添加插件的使用說明和截圖,就可以釋出插件了。

  插件設計過程

  1.制作圖示

  圖示的格式為PNG,大小為19×19像素的圖示顯示在位址欄右側,大小為48×48像素的圖示顯示在擴充管理頁。

  2. manifest.json

  manifest.json定義插件的屬性,這個檔案的格式比較固定,大家下載下傳代碼後,根據自己的實際需要進行簡單的更改就可以用了。

以下是代碼片段:

{"name": "Our Chrome Extension's Name",

"version": "1.0",

"description": "This is the first Chrome extension.",

"icons": { "48": "icon48.png" }, //定義圖檔的大小,可以自己更改

"page_action": { "default_icon": "icon19.png" },//定義圖檔的名稱,可以自己更改

"background_page": "background.html",//定義HTML名稱,可以自己更改

"permissions": [ "tabs" ],

"content_scripts": [{

"matches": ["http://*.google.com/*"],

"js": ["visit.js"]//定義.js檔案名稱,可以自己更改

}]}

  3. .js檔案

  .js檔案檔案是連接配接浏覽器和插件的橋梁,最基本的代碼就是:chrome.extension.sendRequest();,它的作用是向Chrome的擴充管理程式發送一條請求消息,這條消息将被運作的插件HTML檔案捕獲。需要注意的是,在這個檔案中,可以添加其他代碼,例如一些優化代碼。

  4. HTML檔案

  HTML檔案是插件的功能檔案,插件要實作什麼功能全靠這個檔案。我以我開發的保持活躍線上插件為例,進行分析。我的插件,每隔一小段時間,随機打開論壇中的一個文章。

  在這個插件中,我用到了幾個API:chrome.pageAction.show(),用來在浏覽器位址欄右側顯示插件的圖示;chrome.windows.getCurrent(),用來擷取目前浏覽器視窗的ID; chrome.tabs.create(),用來建立一個新的标簽頁;chrome.tabs.remove(),用來關閉打開的标簽頁。

  這幾個API比較基礎,在插件開發中過程一般都用得到,如果要開發複雜的插件,則需要調用更多的API,到http://code.google.com/chrome/extensions去研究一下吧。

  

<html><head><script>

var winid = 0;

var tabid = 0;

chrome.extension.onRequest.addListener( // 捕獲.js檔案中傳來的請求消息

function(request,sender,sendResponse){ // 通過回調函數完成實際工作

chrome.pageAction.show(sender.tab.id);

chrome.windows.getCurrent(function(Win){ // 擷取目前浏覽器視窗的ID

winid = Win.id

});

circle();

}

);

function circle(){

radomURL = "http://bbs.pediy.com/showthread.php?t=" + Math.floor(100000 + Math.random()*6000); // 随機生成論壇一個文章的URL

chrome.tabs.create({windowId:winid, url: radomURL, selected:false}, function(Tab){tabid = Tab.id}); // 打開上述URL

chrome.tabs.remove(tabid); //關閉這個标簽頁

setTimeout("circle()", 60000); // 每隔60秒,重複上述操作

</script></head></html>

繼續閱讀