搜尋
首頁web前端css教學如何構建鍍鉻擴展

How to Build a Chrome Extension

本週末我開發了一個Chrome 擴展程序,因為我發現自己反复執行相同的任務,想要實現自動化。此外,我是一個宅在家裡度過疫情的極客,所以我會把積攢的精力用在創造事物上。這些年來,我已經開發了一些Chrome 擴展程序,希望這篇文章也能幫助你入門。讓我們開始吧!

創建清單文件

第一步是創建一個名為manifest.json的文件,放在項目文件夾中。它的作用類似於package.json ,它為Chrome 網上應用商店提供項目的重要信息,包括名稱、版本、所需權限等等。以下是一個示例:

 {
  "manifest_version": 2,
  "name": "示例名稱",
  "version": "1.0.0",
  "description": "這是一個示例描述",
  "short_name": "示例名稱縮寫",
  "permissions": ["activeTab", "declarativeContent", "storage", "<all_urls> "],
  "content_scripts": [
    {
      "matches": ["<all_urls> "],
      "css": ["background.css"],
      "js": ["background.js"]
    }
  ],
  "browser_action": {
    "default_title": "執行操作時執行某操作",
    "default_popup": "popup.html",
    "default_icon": {
      "16": "icons/icon16.png",
      "32": "icons/icon32.png"
    }
  }
}</all_urls></all_urls>

你可能會注意到一些細節——首先:名稱描述可以隨意填寫。

權限取決於擴展程序需要執行的操作。在這個示例中,我們使用了["activeTab", "declarativeContent", "storage", "<all_urls> "]</all_urls> ,因為這個特定的擴展程序需要有關活動標籤的信息,需要更改頁面內容,需要訪問localStorage,並且需要在所有網站上處於活動狀態。如果它只需要在一個網站上處於活動狀態,我們可以刪除該數組的最後一個索引。

Chrome 的擴展程序文檔中列出了所有權限及其含義。

 "content_scripts": [
  {
    "matches": ["<all_urls> "],
    "css": ["background.css"],
    "js": ["background.js"]
  }
],</all_urls>

content_scripts部分設置擴展程序應處於活動狀態的網站。如果你想要一個單獨的網站,例如Twitter,你可以寫成["https://twitter.com/*"] 。 CSS 和JavaScript 文件是擴展程序所需的一切。例如,我高效的Twitter 擴展程序使用這些文件來覆蓋Twitter 的默認外觀。

 "browser_action": {
  "default_title": "執行操作時執行某操作",
  "default_popup": "popup.html",
  "default_icon": {
    "16": "icons/icon16.png",
    "32": "icons/icon32.png"
  }
}

browser_action中的一些內容也是可選的。例如,如果擴展程序不需要彈出窗口來實現其功能,則可以刪除default_titledefault_popup 。在這種情況下,只需要擴展程序的圖標即可。如果擴展程序僅在某些網站上有效,則Chrome 會在擴展程序處於非活動狀態時將其圖標灰顯。

偵錯

清單文件、CSS 和JavaScript 文件準備就緒後,請在瀏覽器的地址欄中訪問chrome://extensions/ ,然後啟用開發者模式。這將激活“加載已解壓”按鈕,以添加擴展程序文件。還可以切換開發者版本的擴展程序是否處於活動狀態。

我強烈建議此時開始一個GitHub 倉庫來進行版本控制。這是保存工作的好方法。

更新擴展程序時,需要從此界面重新加載它。屏幕上會顯示一個小的刷新圖標。此外,如果擴展程序在開發過程中出現任何錯誤,它也會在此處顯示一個帶有堆棧跟踪和更多信息的錯誤按鈕。

彈出窗口功能

如果擴展程序需要使用從擴展程序圖標彈出的彈出窗口,那麼幸運的是,這非常簡單。在清單文件中使用browser_action指定文件名後,可以使用你喜歡的任何HTML 和CSS 來構建頁面,包括圖像(我傾向於使用內聯SVG)。

我們可能需要為彈出窗口添加一些功能。這可能需要一些JavaScript,因此請確保在清單文件中指定了JavaScript 文件,並在你的彈出窗口文件中也鏈接了它,如下所示:

在該文件中,首先創建功能,我們將像這樣訪問彈出窗口DOM:

 document.addEventListener("DOMContentLoaded", () => {
  var button = document.getElementById("submit");

  button.addEventListener("click", (e) => {
    console.log(e);
  });
});

如果我們在popup.html文件中創建一個按鈕,為其分配一個名為submit的ID,然後返回一個控制台日誌,你可能會注意到實際上控制台中沒有任何內容被記錄。這是因為我們處於不同的上下文,這意味著我們需要右鍵單擊彈出窗口並打開一組不同的DevTools。

現在我們可以訪問日誌和調試了!但是請記住,如果在localStorage 中設置了任何內容,那麼它只存在於擴展程序的DevTools localStorage 中;而不是用戶的瀏覽器localStorage。 (我第一次嘗試時就遇到了這個問題!)

在擴展程序外部運行腳本

這一切都很好,但是假設我們想要運行一個可以訪問當前選項卡信息的腳本呢?這裡有幾種方法可以做到這一點。我通常會在DOMContentLoaded事件監聽器內部調用一個單獨的函數:

示例1:激活文件

function exampleFunction() {
  chrome.tabs.executeScript(() => {
    chrome.tabs.executeScript({ file: "content.js" });
  });
}

示例2:只執行少量代碼

如果只需要運行少量代碼,這種方法非常棒。但是,由於它需要將所有內容作為字符串或模板字面量傳遞,因此很快就會變得難以處理。

 function exampleFunction() {
  chrome.tabs.executeScript({
    code: `console.log('hi there');`
  });
}

示例3:激活文件並傳遞參數

請記住,擴展程序和選項卡在不同的上下文中運行。這使得在它們之間傳遞參數並非易事。我們將在這裡嵌套前兩個示例,將一些代碼傳遞到第二個文件中。我將所有需要的內容存儲在一個選項中,但是為了使它正常工作,我們將必須對對象進行字符串化處理。

 function exampleFunction(options) {
  chrome.tabs.executeScript(
    { code: "var options = " JSON.stringify(options) },
    function() {
      chrome.tabs.executeScript({ file: "content.js" });
    }
  );
}

圖示

即使清單文件只定義了兩個圖標,我們還需要另外兩個才能正式將擴展程序提交到Chrome 網上應用商店:一個128 像素的正方形圖標,還有一個我稱為icon128_proper.png的圖標,它也是128 像素,但在圖像邊緣和圖標之間有一些填充。

請記住,無論使用哪個圖標,都需要在瀏覽器的淺色模式和深色模式下看起來都很好。我通常在Noun Project 上找到我的圖標。

提交到Chrome 網上應用商店

現在我們可以轉到Chrome 網上應用商店開發者控制台來提交擴展程序了!單擊“新建項目”按鈕,然後將壓縮的項目文件拖放到上傳器中。

Chrome 會在此處詢問一些關於擴展程序的問題,並請求有關擴展程序中請求的權限以及為什麼需要這些權限的信息。警告:請求“activeTab”或“tabs”權限將需要更長的審核時間,以確保代碼沒有執行任何濫用行為。

就是這樣!這應該可以讓你準備好開始構建Chrome 瀏覽器擴展程序了! ?

以上是如何構建鍍鉻擴展的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
這麼多顏色鏈接這麼多顏色鏈接Apr 13, 2025 am 11:36 AM

最近有一系列有關顏色的工具,文章和資源。請允許我通過將它們四捨五之後關閉幾個標籤,以供您享受。

自動利潤在Flexbox中的工作方式自動利潤在Flexbox中的工作方式Apr 13, 2025 am 11:35 AM

羅賓以前已經介紹過這一點,但是我在過去的幾周里聽到了一些關於它的困惑,看到另一個人在解釋它,我想

移動彩虹移動彩虹Apr 13, 2025 am 11:27 AM

我絕對喜歡三明治網站的設計。在許多美麗的功能中,這些標題是滾動時帶有彩虹的下線。它不是

新年,新工作?讓我們做一個網格驅動的簡歷!新年,新工作?讓我們做一個網格驅動的簡歷!Apr 13, 2025 am 11:26 AM

許多流行的簡歷設計通過以網格形狀鋪設部分來充分利用可用的頁面空間。讓我們使用CSS網格創建一個佈局

將用戶擺脫過多習慣的一種方法將用戶擺脫過多習慣的一種方法Apr 13, 2025 am 11:25 AM

頁面重新加載是一回事。有時,當我們認為它沒有響應或認為新內容可用時,我們會刷新頁面。有時我們只是生氣

域驅動的設計與React域驅動的設計與ReactApr 13, 2025 am 11:22 AM

關於如何在React世界中組織前端應用的指導很少。 (只需移動文件,直到“感覺正確”,大聲笑)。真相

檢測非活動用戶檢測非活動用戶Apr 13, 2025 am 11:08 AM

大多數情況下,您並不真正在乎用戶是否積極參與或暫時非活動。不活躍,意思,也許他們

Wufoo ZapierWufoo ZapierApr 13, 2025 am 11:02 AM

Wufoo一直在集成方面非常出色。他們與特定應用程序(例如廣告系列顯示器,MailChimp和Typekit)進行集成,但他們也

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器