《从零开始:轻松打造浏览器回到顶部扩展》

45 阅读5分钟

前言

为什么是做回到顶部按钮这个功能,主要还是因为我在浏览一些常用网页的时候发现,每次滚动到一定位置的时候我想要返回顶部找关键信息的时候,它居然没有!!!这么简单的一个功能,我发现在很多页面上都没有实现,那这可太糟糕了,正好借着这个需求,让我尝试地去了解和实现属于我个人的浏览器插件,不然连点小插件都不会搞,怎么符合程序员的身份。

一、相关资源与基础知识

📌 什么是浏览器扩展?
它是运行在浏览器中的轻量级程序,能为浏览器赋予:
✅ 网页魔改:一键修改页面内容 / 样式
✅ 功能增强:添加翻译、截图、广告拦截等实用工具
✅ 个性定制:打造专属主题、快捷操作手势
✅ 开发调试:辅助前端工程师高效开发

小提示:当开发扩展遇到难以实现的功能时,可以参考其他插件的源码。不过要注意 Manifest 版本问题,不同版本在配置和写法上存在差异。扩展的存储位置通常为 C:\Users\用户名\AppData\Local\Microsoft\Edge\User Data\Default\Extensions,扩展文件夹名称即为插件的 ID,可在浏览器扩展管理中查看。若找不到该路径,可使用 Everything 查找 ID 名称。

二、扩展程序的组成

Chrome 扩展程序由多个组件构成,每个组件都有其独特的作用:

  1. manifest.json:这是扩展包中最基础且必不可少的文件,它以 JSON 格式描述了扩展程序的功能和配置,必须放置在根目录。
  2. Service Worker:在 Manifest V3 中,取代了传统的后台页面,负责持续运行、事件监听和与其他组件通信。
  3. 内容脚本:用于直接注入网页,修改网页内容和样式。
  4. 工具栏操作:通常表现为浏览器工具栏上的图标,点击后可触发特定操作。
  5. 侧边面板:提供额外的交互界面。
  6. DeclarativeNetRequest:用于对网络请求进行声明式处理。

三、快速上手开发回到顶部扩展

1. 创建 manifest.json 文件

首先,创建一个新的目录用于存放扩展程序文件,并在根目录下创建 manifest.json 文件。以下是一个简单的示例:


    {
      "name": "Scroll Top",
      "version": "0.0.1",
      // Manifest V3
      // https://developer.chrome.com/docs/extensions/develop/migrate/what-is-mv3?hl=zh-cn
      "manifest_version": 3,
      "description": "An extension to scroll the page to top.",
      // 需要在引用的文件夹路径存放不同尺寸的icon文件,这里为了省事引用的都是同一个文件
      "icons": {
        "16": "icons/icon.png", // 扩展程序页面和上下文菜单上的网站图标。
        "32": "icons/icon.png", // Windows 计算机通常需要此大小。
        "48": "icons/icon.png", // 显示在“扩展程序”页面上。
        "128": "icons/icon.png" // 在安装和 Chrome 应用商店中显示。
      },
   
      // 需要直接注入页面的JS
      "content_scripts": [{}],
      // 权限申请
      // https://developer.chrome.com/docs/extensions/reference/permissions-list?hl=zh-cn
      "permissions": []
    }

manifest.json 文件详细描述了扩展的基本信息、图标、默认弹出窗口以及权限等内容。你可以参考 manifest.json 键列表 了解更多配置选项。

2. 创建默认弹出对话框文件

创建 popup 文件夹并其中创建 popup.html 文件。该文件的作用是,当用户点击扩展图标时,该html将以弹窗对话框的形式显示。示例代码如下:

    <!doctype html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <style>
          .popup {
            width: 120px;
          }
        </style>
      </head>
      <body>
        <div class="popup">返回顶部插件</div>
      </body>
    </html>

然后在manifest.json添加以下配置

   "action": {
        "default_popup": "popup/popup.html",
        "default_title": "这是一个示例扩展"
      },

3. 在 Edge 中添加扩展

  • 打开扩展管理页面,开启开发人员模式。
  • 首次安装扩展时,点击 “加载解压缩的扩展” 按钮,会弹出 “选择扩展目录” 对话框。
  • 选择包含扩展源文件的目录,然后点击 “选择文件夹” 按钮。

完成上述步骤后,你创建的扩展将显示在扩展列表中。
image.png

4. 创建内容脚本

在扩展程序目录中创建一个名为 content-script 的目录,并在其中创建 scrollTop.js 文件。以下是实现回到顶部功能的代码:


    function addStyle(css) {
      try {
        var style = document.createElement("style");
        style.textContent = css;
        (
          document.head ||
          document.body ||
          document.documentElement ||
          document
        ).appendChild(style);
      } catch (e) {
        console.log("Error: env: adding style " + e);
      }
    }

    document.addEventListener("DOMContentLoaded", function () {
      addStyle(`.BackToTop {
        display: none;
        position: fixed;
        bottom: 20px;
        right: 20px;
        padding: 10px;
        background-color: #4caf50;
        color: white;
        border: none;
        cursor: pointer;
        z-index: 1000;
      }`);

      const button = document.createElement("button");
      button.className = "BackToTop";
      button.textContent = "Back to Top";
      button.addEventListener("click", () => {
        window.scrollTo({ top: 0, behavior: "smooth" });
      });

      function handleScroll() {
        if (window.scrollY > 300) {
          button.style.display = "block";
        } else {
          button.style.display = "none";
        }
      }

      window.addEventListener("scroll", handleScroll);
      document.body.appendChild(button);
    });

创建完脚本文件后,需要在 manifest.json 中添加如下配置:


    "content_scripts": [
      {
        // "<all_urls>" 表示匹配所有地址
        "matches": ["<all_urls>"],
        "js": ["content-script/scrollTop.js"],
        // 代码注入的时间,可选值: "document_start", "document_end", or "document_idle",最后一个表示页面空闲时,默认document_idle
        "run_at": "document_start"
      }
    ]

完成上述步骤后,在插件管理页面刷新插件,插件即可生效。

image.png

打开任意网站,滚动页面到一定高度,你将看到页面上出现一个回到顶部的按钮。


通过以上步骤,你已经成功创建了一个简单的回到顶部扩展。接下来,你可以继续优化和拓展这个扩展,以满足更多需求。

📚参考资料

Chrome 扩展开发
从零实现的Chrome扩展
Chrome插件(扩展)开发全攻略
MDN-浏览器扩展
Content Security Policy
Jquery Api 速查表