快速入门 Chrome 插件开发!

31 阅读3分钟

Chrome 插件开发详解:manifest.json、popup.html 和 content.js 的作用与实现

下面我将完整拆分 关键词高亮 Chrome 插件 的代码,并详细解释每个文件的作用和实现逻辑。

1. manifest.json - 插件配置文件

这是 Chrome 插件的核心配置文件,定义插件的基本信息、权限和资源。

json

{
  "manifest_version": 3,
  "name": "关键词高亮插件",
  "version": "1.0",
  "description": "高亮网页中的指定关键词",
  "action": {
    "default_popup": "popup.html",
    "default_icon": "icon.png"
  },
  "permissions": ["activeTab", "scripting"],
  "icons": {
    "16": "icon16.png",
    "48": "icon48.png",
    "128": "icon128.png"
  }
}

关键字段解析

字段作用示例值
manifest_version必须为 3(Manifest V3 是最新标准)3
name插件名称"关键词高亮插件"
version版本号"1.0"
action.default_popup点击插件图标时弹出的页面"popup.html"
permissions声明插件需要的权限: - activeTab:访问当前标签页 - scripting:执行脚本["activeTab", "scripting"]
icons插件图标(不同尺寸)"icon16.png"

2. popup.html - 插件弹出窗口界面

用户在这里输入关键词并触发高亮操作。

html

<!DOCTYPE html>
<html>
<head>
  <style>
    body { width: 200px; padding: 10px; }
    button { margin-top: 10px; }
  </style>
</head>
<body>
  <input type="text" id="keyword" placeholder="输入要搜索的关键词">
  <input type="color" id="colorPicker" value="#FFFF00">
  <button id="highlightBtn">高亮关键词</button>
  <button id="clearBtn">清除高亮</button>

  <script src="popup.js"></script>
</body>
</html>

关键元素解析

元素作用
<input id="keyword">用户输入关键词
<input type="color" id="colorPicker">选择高亮颜色(默认黄色)
<button id="highlightBtn">点击后高亮关键词
<button id="clearBtn">点击后清除高亮
<script src="popup.js">引入交互逻辑

3. content.js - 在网页中执行的高亮逻辑

核心功能:遍历网页 DOM,找到匹配关键词的文本并高亮。

javascript

// 高亮函数
function highlightKeyword(keyword, color = "yellow") {
  // 清除旧的高亮
  document.querySelectorAll(".keyword-highlight").forEach(el => {
    el.replaceWith(el.textContent);
  });

  if (!keyword) return;

  // 遍历所有文本节点
  const walker = document.createTreeWalker(
    document.body,
    NodeFilter.SHOW_TEXT
  );

  while (walker.nextNode()) {
    const node = walker.currentNode;
    if (node.textContent.includes(keyword)) {
      const span = document.createElement("span");
      span.className = "keyword-highlight";
      span.style.backgroundColor = color;
      span.textContent = node.textContent;
      node.replaceWith(span);
    }
  }
}

// 监听来自 popup 的消息
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  if (request.action === "highlight") {
    highlightKeyword(request.keyword, request.color);
  } else if (request.action === "clear") {
    highlightKeyword(""); // 传入空字符串清除高亮
  }
});

关键逻辑解析

  1. highlightKeyword()

    • 先清除旧的高亮(避免重复)
    • 使用 TreeWalker 遍历网页所有文本节点
    • 找到包含关键词的文本,用 <span> 包裹并设置背景色
  2. chrome.runtime.onMessage

    • 监听来自 popup.js 的消息
    • 根据消息类型执行高亮或清除操作

4. popup.js - 弹出窗口的交互逻辑

处理用户点击事件,并向 content.js 发送消息。

javascript

document.getElementById("highlightBtn").addEventListener("click", () => {
  const keyword = document.getElementById("keyword").value;
  const color = document.getElementById("colorPicker").value;

  // 向当前标签页发送高亮指令
  chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
    chrome.tabs.sendMessage(tabs[0].id, {
      action: "highlight",
      keyword: keyword,
      color: color
    });
  });
});

document.getElementById("clearBtn").addEventListener("click", () => {
  // 发送清除指令
  chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
    chrome.tabs.sendMessage(tabs[0].id, { action: "clear" });
  });
});

关键交互流程

  1. 用户点击  "高亮关键词"  按钮
    → popup.js 获取关键词和颜色
    → 通过 chrome.tabs.sendMessage 发送给 content.js
    → content.js 执行高亮
  2. 用户点击  "清除高亮"  按钮
    → 发送 clear 指令
    → content.js 清除所有高亮

5. 完整文件结构

highlight-keywords-extension/
├── manifest.json    # 配置文件
├── popup.html       # 弹出窗口界面
├── popup.js         # 弹出窗口逻辑
├── content.js       # 高亮核心逻辑
├── icon.png         # 插件图标
└── icon16.png       # 小图标(可选)

6. 如何测试这个插件?

  1. 打开 Chrome,访问 chrome://extensions
  2. 开启  "开发者模式"
  3. 点击  "加载已解压的扩展程序" ,选择插件文件夹

总结

文件作用关键点
manifest.json插件配置定义权限、弹出页面、图标
popup.html用户交互界面提供输入框和按钮
popup.js处理用户点击发送消息给 content.js
content.js操作网页 DOM实现高亮/清除逻辑

通过这样的架构,我们实现了一个完整的 Chrome 插件,AI 可以轻松生成这些代码,开发者只需调整细节即可。