目錄
創建清單文件
偵錯
彈出窗口功能
在擴展程序外部運行腳本
示例1:激活文件
示例2:只執行少量代碼
示例3:激活文件並傳遞參數
圖示
提交到Chrome 網上應用商店
首頁 web前端 css教學 如何構建鍍鉻擴展

如何構建鍍鉻擴展

Apr 06, 2025 am 09:51 AM

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1663
14
CakePHP 教程
1419
52
Laravel 教程
1313
25
PHP教程
1263
29
C# 教程
1237
24
Google字體可變字體 Google字體可變字體 Apr 09, 2025 am 10:42 AM

我看到Google字體推出了新設計(Tweet)。與上一次大型重新設計相比,這感覺更加迭代。我幾乎無法分辨出區別

如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 Apr 11, 2025 am 11:29 AM

您是否曾經在項目上需要一個倒計時計時器?對於這樣的東西,可以自然訪問插件,但實際上更多

HTML數據屬性指南 HTML數據屬性指南 Apr 11, 2025 am 11:50 AM

您想了解的有關HTML,CSS和JavaScript中數據屬性的所有信息。

使Sass更快的概念證明 使Sass更快的概念證明 Apr 16, 2025 am 10:38 AM

在一個新項目開始時,Sass彙編發生在眼睛的眨眼中。感覺很棒,尤其是當它與browsersync配對時,它重新加載

我們如何創建一個在SVG中生成格子呢模式的靜態站點 我們如何創建一個在SVG中生成格子呢模式的靜態站點 Apr 09, 2025 am 11:29 AM

格子呢是一塊圖案布,通常與蘇格蘭有關,尤其是他們時尚的蘇格蘭語。在Tar​​tanify.com上,我們收集了5,000多個格子呢

如何在WordPress主題中構建VUE組件 如何在WordPress主題中構建VUE組件 Apr 11, 2025 am 11:03 AM

內聯式模板指令使我們能夠將豐富的VUE組件構建為對現有WordPress標記的逐步增強。

php是A-OK用於模板 php是A-OK用於模板 Apr 11, 2025 am 11:04 AM

PHP模板通常會因促進Subpar代碼而變得不良說唱,但這並不是這樣的情況。讓我們看一下PHP項目如何執行基本的

編程SASS創建可訪問的顏色組合 編程SASS創建可訪問的顏色組合 Apr 09, 2025 am 11:30 AM

我們一直在尋求使網絡更容易訪問。顏色對比只是數學,因此Sass可以幫助涵蓋設計師可能錯過的邊緣案例。

See all articles