在每個網頁上執行指令碼

建立第一個可在網頁上插入新元素的擴充功能。

總覽

本教學課程會建構擴充功能,將預期讀取時間新增到任何 Chrome 擴充功能和 Chrome 線上應用程式商店說明文件頁面。

在擴充功能的歡迎頁面中閱讀延長期限
擴充功能的歡迎頁面中的閱讀時間延長。

在本指南中,我們將說明下列概念:

  • 擴充功能資訊清單。
  • 擴充功能使用的圖示大小。
  • 如何使用內容指令碼,在網頁中插入程式碼。
  • 如何使用比對模式。
  • 擴充功能權限。

事前準備

本指南假設您具有基本的網路開發經驗。建議您參閱 Hello World 教學課程,瞭解擴充功能開發工作流程。

建立擴充功能

首先,請建立名為 reading-time 的新目錄,用於存放擴充功能的檔案。如有需要,您可以從 GitHub 下載完整的原始碼。

步驟 1:新增擴充功能相關資訊

資訊清單 JSON 檔案是唯一的必要檔案。其中含有擴充功能的重要資訊。在專案的根目錄中建立 manifest.json 檔案,並新增下列程式碼:

{
  "manifest_version": 3,
  "name": "Reading time",
  "version": "1.0",
  "description": "Add the reading time to Chrome Extension documentation articles"
}

這些鍵包含擴充功能的基本中繼資料。這類擴充功能可控管擴充功能在擴充功能頁面上的顯示方式,以及擴充功能在 Chrome 線上應用程式商店發布時。如要深入瞭解,請查看「資訊清單」總覽頁面上的 "name""version""description" 鍵。

💡? 擴充功能資訊清單的其他事實

  • 這個金鑰必須位於專案的位置。
  • 唯一的必要鍵為 "manifest_version""name""version"
  • 它支援在開發期間的註解 (//),但必須先移除這些註解,才能將程式碼上傳到 Chrome 線上應用程式商店。

步驟 2:提供圖示

那麼,為何需要圖示?雖然在開發期間是選用圖示,但如果您打算在 Chrome 線上應用程式商店發布擴充功能,就必須使用圖示。這些項目也會顯示在「擴充功能管理」頁面等其他位置。

建立 images 資料夾,並將圖示放入其中。您可以在 GitHub 上下載圖示。接下來,請將醒目顯示的程式碼新增至資訊清單,宣告圖示:

{
  "icons": {
    "16": "images/icon-16.png",
    "32": "images/icon-32.png",
    "48": "images/icon-48.png",
    "128": "images/icon-128.png"
  }
}

建議使用 PNG 檔案,但可使用其他檔案格式 (SVG 檔案除外)。

💡? 這些不同大小的圖示會顯示在哪裡?

圖示尺寸 圖示使用
16x16 擴充功能頁面和內容選單上的網站小圖示。
32x32 Windows 電腦通常也需要這個大小。
48x48 會顯示在「擴充功能」頁面上。
128x128 會顯示在安裝作業和 Chrome 線上應用程式商店中。

步驟 3:宣告內容指令碼

擴充功能可以執行讀取及修改網頁內容的指令碼。這就是所謂的「內容指令碼」。而是隔離的世界,也就是說,他們可以對 JavaScript 環境進行變更,而不會與代管網頁或其他擴充功能的內容指令碼相衝突。

將下列程式碼新增至 manifest.json,以註冊名為 content.js 的內容指令碼。

{
  "content_scripts": [
    {
      "js": ["scripts/content.js"],
      "matches": [
        "https://developer.chrome.com/docs/extensions/*",
        "https://developer.chrome.com/docs/webstore/*"
      ]
    }
  ]
}

"matches" 欄位可包含一或多個比對模式。以便瀏覽器識別要在哪些網站插入內容指令碼。比對模式由三個部分組成:<scheme>://<host><path>。可以包含「*」字元。

💡? 這項擴充功能是否會顯示權限警告?

當使用者安裝擴充功能時,瀏覽器會告知擴充功能可執行的操作。內容指令碼會要求在符合比對模式條件的網站上執行內容。

在此範例中,使用者會看到下列權限警告:

使用者安裝「閱讀時間」擴充功能時會看到的權限警告
讀取時間權限警告。

如要進一步瞭解擴充功能權限,請參閱宣告權限及警告使用者

步驟 4:計算並插入朗讀時間

內容指令碼可使用標準文件物件模型 (DOM) 讀取及變更網頁內容。擴充功能會先檢查網頁是否含有 <article> 元素。 然後計算這個元素中的所有字詞,建立一個顯示總閱讀時間的段落。

在名為 scripts 的資料夾內建立名為 content.js 的檔案,然後新增下列程式碼:

const article = document.querySelector("article");

// `document.querySelector` may return null if the selector doesn't match anything.
if (article) {
  const text = article.textContent;
  const wordMatchRegExp = /[^\s]+/g; // Regular expression
  const words = text.matchAll(wordMatchRegExp);
  // matchAll returns an iterator, convert to array to get word count
  const wordCount = [...words].length;
  const readingTime = Math.round(wordCount / 200);
  const badge = document.createElement("p");
  // Use the same styling as the publish information in an article's header
  badge.classList.add("color-secondary-text", "type--caption");
  badge.textContent = `⏱️ ${readingTime} min read`;

  // Support for API reference docs
  const heading = article.querySelector("h1");
  // Support for article docs with date
  const date = article.querySelector("time")?.parentNode;

  (date ?? heading).insertAdjacentElement("afterend", badge);
}

💡? 這個程式碼使用了有趣的 JavaScript

測試是否正常運作

請確認專案的檔案結構如下所示:

讀取時間資料夾的內容:manifest.json、指令碼資料夾中的 content.js,以及圖片資料夾。

在本機載入擴充功能

如要在開發人員模式中載入未封裝的擴充功能,請按照「開發基本概念」所述的步驟操作。

開啟擴充功能或 Chrome 線上應用程式商店說明文件

你可以開啟一些頁面,瞭解每篇報導的閱讀時間長度。

看起來應該像這樣:

歡迎頁面上的閱讀時間
擴充功能歡迎頁面,加上閱讀時間延長

🎯? 潛在強化

請根據您今天學到的知識,嘗試下列任一做法:

繼續建構

恭喜您完成本教學課程 🎉?。完成本系列的其他教學課程,即可繼續精進您的技能:

延伸 學習目標
專注模式 點選擴充功能動作後,在目前網頁上執行程式碼。
分頁管理員 建立管理瀏覽器分頁的彈出式視窗。

繼續探索

希望您喜歡這個 Chrome 擴充功能,期待能繼續在 Chrome 開發學習旅程中繼續學習。建議您採用下列學習路徑:

  • 開發人員指南提供數十種其他說明文件連結,協助您瞭解進階擴充功能建立功能。
  • 擴充功能可以存取強大的 API,而不僅止於開放網路提供的 API。Chrome API 說明文件逐一介紹各項 API。