Chrome插件開發(一)


作為一個開發人員,我們在日常工作中肯定會用到 Chrome 瀏覽器,同時也會用到谷歌的一些插件,比如 Tampermonkey,AdBlock等,在之前的文章本人還用過 Tampermonkey 插件,好使又好玩,傳送門 

https://www.cnblogs.com/weijiutao/p/11677932.html

https://www.cnblogs.com/weijiutao/p/10608107.html

在某些時候我們會自己開發一些簡單實用的插件,本章開始我們就開始學習一下如何做一些簡單的谷歌插件。

作為一個新手,我在學習如何制作谷歌插件時翻到了博主 小茗同學 的筆記 https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html,從中深受啟發,在此先謝過!

 

一、插件是什么?

插件是遵循一定規范的應用程序接口編寫出來的程序,而chrome插件則是運行在chrome瀏覽器上的小程序,能幫我們解決一下工作學習中一些重復繁瑣的事情。

二、插件的基礎知識

對於chrome插件來說,最核心的應該是manifest.json這個配置文件了,利用它我們可以定義在什么時機在什么網頁執行什么腳本,有一些什么行為,下面先看一下manifest.json的格式:

  1 {
  2   // 擴展名稱
  3   "name": "MyExtension",
  4  
  5   // 版本。由1到4個整數構成。多個整數間用"."隔開
  6   "version": "1.0",
  7  
  8   // manifest文件版本號。Chrome18開始必須為2
  9   "manifest_version": 2,
 10  
 11   // 描述。132個字符以內
 12   "description": ",
 13  
 14   // 擴展圖標。推薦大小16,48,128
 15   "icons": {
 16     "16": "image/icon-16.png",
 17     "48": "image/icon-48.png",
 18     "128": "image/icon-128.png"
 19   },
 20  
 21   // 語言
 22   "default_locale": "en",
 23  
 24   // 地址欄右側圖標管理,含圖標及彈出頁面的設置等
 25   // 建議至少保留一個設置,不然擴展圖標是暗的
 26   "browser_action": {
 27     "default_icon": "image/icon-128.png",
 28     "default_title": "My Message",
 29     "default_popup": "html/browser.html"
 30   },
 31  
 32   // 地址欄最后附加圖標。含圖標及行為等
 33   "page_action": {
 34     "default_icon": "image/icon-48.png",
 35     "default_title": "My Test",
 36     "default_popup": "html/page.html"
 37   },
 38  
 39   // 主題,用於更改整個瀏覽器的外觀
 40   "theme": {},
 41  
 42   // 指定擴展需要跳轉到的URL
 43   "app": {},
 44  
 45   // 指定擴展進程的background運行環境及運行腳本
 46   "background": {
 47     "scripts": [
 48       "lib/jquery-3.3.1.min.js",
 49       "js/background.js"
 50     ],
 51     "page":"html/background.html"
 52   },
 53  
 54   // 替換頁面
 55   "chrome_url_overrides": {
 56     "pageToOverride": "html/overrides.html"
 57   },
 58  
 59   // 指定在web頁面運行的腳本/插入的css及運行/插入時機
 60   "content_scripts": [{
 61     "matches": ["https://www.baidu.com/*"],
 62     "css": ["css/mystyles.css"],
 63     "js": ["lib/jquery-3.3.1.min.js", "js/content.js"],
 64     "run_at": "document_idle"
 65   }],
 66  
 67   // 安全策略
 68   "content_security_policy": ",
 69  
 70   "file_browser_handlers": [],
 71  
 72   // 擴展的官方主頁
 73   "homepage_url": "http://xxx",
 74  
 75   // 插件在隱私模式下的配置
 76   "incognito": "spanning",
 77  
 78   // 用戶操作意圖描述
 79   "intents": {},
 80  
 81   // 擴展唯一標識。不需要人為指定
 82   "key": ",
 83  
 84   // 擴展所需chrome的最小版本
 85   "minimum_chrome_version": "1.0",
 86  
 87   // 消息與本地處理模塊映射
 88   "nacl_modules": [],
 89  
 90   // 是否允許脫機運行
 91   "offline_enabled": true,
 92  
 93   // ominbox即地址欄。用於響應地址欄的輸入事件
 94   "omnibox": {
 95     "keyword": "myKey"
 96   },
 97  
 98   // 選項頁。用於在擴展管理頁面跳轉到選項設置
 99   "options_page": "aFile.html",
100  
101   // 申請權限
102   "permissions": [
103     "https://www.baidu.com/*",
104     "background",
105     "tabs"
106   ],
107  
108   // 擴展。可調用第三方擴展
109   "plugins": [{
110     "path": "extension_plugin.dll",
111     "public": true
112   }],
113  
114   // 指定所需要的特殊技術。目前只支持"3D"
115   "requirements": {},
116  
117   // 自動升級
118   "update_url": "http://path/to/updateInfo.xml",
119  
120   // 指定資源路徑,為String數組
121   "web_accessible_resources": []
122 }

 

這么多?先寫段代碼壓壓驚,真的別被嚇着了,雖然可用的屬性有這么多,但是常用的就那么幾個,我們一個個看一下:

1、name 擴展名稱。

2、version 插件的版本。

3、manifest_version manifest配置文件版本。

4、description 對於插件功能的描述。

5、icons 插件的圖標 可以為插件找一個好看的圖標。

6、browser_action 可以定義插件的圖標,點擊插件時彈出的頁面,以及插件的標題,建議始終保留一個,直接不設置這個屬性圖標會是灰色的,設置了后才會亮起來。

7、background 背景頁,擴展進程的背景運行環境,可以攔截修改請求等等。

8、content_scripts 內容腳本,可以指定在什么時機向什么頁面插入什么腳本或者css資源

9、permissions 權限申請項,比如存儲權限storage,請求攔截權限webRequest, webRequestBlocking等等。

在了解了這些基礎知識之后,剩下的工作就是按照我們想要實現的實際功能,編寫代碼就好了,下面我們正式開始編寫我們的第一個插件,由於是第一個插件,雖然功能很簡單,但是我們也要給他取一個響亮的名字“插件終結者”,怎么個終結法,且聽我們一一道來。

首先我們打開素材鏈接:http://webpack.wuhaolin.cn,這是一本在線書籍,叫《深入淺出webpack》,講的非常全面非常好有興趣的可以看看,回到整體,當我們看第一章的時候,一切都非常的好,但是到了第二張的時候卻出現了一個非常煩人的彈窗

 

 

當然,作為程序員的我們肯定不能被這小小的彈窗難住,然后我們做了第一次嘗試,打開開發者工具,找到彈窗所在的節點,移除掉,但是當我們滾動的頁面的時候那該死的彈框又出現了,說明有代碼在監聽彈窗節點,當不存在的時候直接新加一個。接着我們做了第二次嘗試,既然你不讓我移除節點,那我們不移除了,同樣的找到彈窗節點,添加樣式: display: none!important; 

使用!important的目的是為了提升樣式的優先級,讓彈窗始終不可見,在寫入了這個樣式后,彈窗就隱藏了,而且滾動的時候也不會再出現,但是當我們看其他章節或者刷新頁面的時候那惱人的彈框又出來了,能不能自動處理隱藏呢?

是時候展示真正的技術了,我們之前在介紹基礎知識的時候提到了content_scripts字段,可以定義在什么時機向什么頁面插入什么腳本或css資源,我們只需要在上面的頁面加載完成后,向頁面注入隱藏彈窗的css代碼就好了。

 

 

如上圖,檢查元素后我們可以通過:

1 .gitbook-plugin-modal {
2   display: none!important;
3 }

manifest配置文件:

{
  "name": "PopBlock",
  "version": "1.0",
  "manifest_version": 2,
  "description": "移除鬧人的彈框",
  "browser_action": {
    "default_title": "PopBlock"
  },
  "content_scripts": [{
    "matches": ["https://webpack.wuhaolin.cn/*"],
    "css": ["css/popup.css"],
    "run_at": "document_end"
  }]
}

目錄結構如下:

 

這個並沒有添加圖標,可以自行添加,然后我們用chrome瀏覽器開發者模式加載我們編寫的插件,會發現再也不會有煩人的彈窗干擾我們的視線了。 

 

 我們通過更多工具-->擴展程序進入chrome的插件管理界面,然后通過以下操作:

 

然后我們就加載了次插件,如下:

 

 這樣,當我們再次打開 http://webpack.wuhaolin.cn 時,惱人的彈窗就消失不見了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM