1 靈感
某天看到了一個叫github1s的倉庫:html
基於Node.JS
、Yarn
、Python
等技術棧,在github.com
上面加上「一秒」,也就是github1s.com
,就能在VSCode
中打開該倉庫,很是好用。git
同時筆者安裝有一個叫Sourcegraph
的擴展,就是下面這個:github
用過的同窗都知道這個擴展是幹嗎的,因而筆者就想相似的在這個擴展旁邊加一個超連接的擴展直接打開github1s.com
,效果圖已經在上面了,點擊那個VSCode
的圖標就能夠直接打開。chrome
2 動手
因爲筆者並無擴展開發的經驗,所以先去看了一下Chrome
擴展開發的文檔並留下了一篇基礎教程博客,而後就能夠開始動手了,項目結構以下:json
3 圖標
關於圖標,實際上是花了一點時間的,好比,受到該倉庫的影響,一開始定的圖標是下面這樣子的:app
而後想了一下好像不太對勁,就改爲了這樣子的:svg
至於在擴展管理中顯示的圖片,改爲了一個比較簡單的:測試
這樣圖標的問題就解決了。this
4 顯示
下一步就是添加功能到擴展中而且讓其顯示在Sourcegraph
的旁邊,首先manifest.json
以下:url
{ "name": "Github1s", "description": "One second to read GitHub code with VS Code.(https://github.com/conwnet/github1s)", "version": "1.0", "manifest_version": 3, "content_scripts": [{ "matches": ["https://github.com/*/*"], "js": ["/js/icon.js","/js/init.js"] }], "action": { "default_icon": { "16": "/icons/logo16.png", "32": "/icons/logo32.png", "48": "/icons/logo48.png", "128": "/icons/logo128.png" } }, "icons": { "16": "/icons/logo16.png", "32": "/icons/logo32.png", "48": "/icons/logo48.png", "128": "/icons/logo128.png" } }
解釋一下content_scripts
,當匹配到matches
中的URL
時,便會自動執行js
裏面的腳本,先來看一下init.js
,這個腳本的做用就是添加把圖標添加到Sourcegraph
的旁邊:
let list = document.getElementsByClassName("pagehead-actions") if (list.length > 0) { list = list[0] const li = document.createElement('li') const a = document.createElement('a') a.href = 'https://github1s.com/' + window.location.href.split('github.com')[1] a.target = '_black' a.className = 'btn btn-sm tooltipped tooltipped-s' a.style.height = '28px' a.style.paddingBottom = '0' a.style.paddingTop = '2px' a.innerHTML = base64Logo a.setAttribute('aria-label','Open with VSCode') li.append(a) list.insertBefore(li, list.getElementsByTagName("li")[0]) }
由於看了一下這裏的代碼:
就是一個<ul>
包含<li>
,因而就手動添加了一個<li>
,裏面包含一個<a>
,加上樣式、超連接以及一個叫ariaLabel
的屬性,這個屬性會在光標懸浮的時候顯示:
這樣功能就實現了,剩下的問題就是圖標的顯示,由於不能直接插入圖片:
a.innerHTML = '<img src="/icons/code20.png">'
由於這樣會被解析成:
<img src="https://github.com/icons/code20.png">
另外也考慮到縮放的問題,所以採用了base64
+svg
顯示:
這樣擴展就開發完成了。
5 測試
測試環境:
Chrome 88.0.4324.150
Chromium 88.0.4324.150
Brave 1.19.92
FireFox 85.0.1
安裝的時候開啓開發者模式,選擇Load unpacked
便可。火狐的話打開about:debugging#/runtime/this-firefox
,選擇Load Temporary Add-on
,接着選擇manifest.json
便可。
Brave
測試:
Chrome
測試:
Chromium
測試:
FireFox
測試失敗,由於目前版本(85.0.1
)不支持Manifest V3
,只支持Manifest V2
,修改成V2
版本後成功:
6 關於FireFox
上面也說了目前FireFox
不支持Manifest V3
版本,所以若是須要使用Manifest V2
版本,二者比較能夠參考官方文檔。
7 發佈
發佈很簡單,擴展管理頁面選擇Pack Extension
便可。
若是須要發佈到Chrome Web Store
,須要註冊成爲Chrome
網上應用商店開發者,能夠參考官方文檔。