<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>工具开发 on Leanku 的博客</title><link>https://www.leanku.com/tags/%E5%B7%A5%E5%85%B7%E5%BC%80%E5%8F%91/</link><description>Recent content in 工具开发 on Leanku 的博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 15 Jan 2025 00:00:00 +0800</lastBuildDate><atom:link href="https://www.leanku.com/tags/%E5%B7%A5%E5%85%B7%E5%BC%80%E5%8F%91/index.xml" rel="self" type="application/rss+xml"/><item><title>Chrome 插件开发</title><link>https://www.leanku.com/post/tools/chrome-extension-development-intro/</link><pubDate>Wed, 15 Jan 2025 00:00:00 +0800</pubDate><guid>https://www.leanku.com/post/tools/chrome-extension-development-intro/</guid><description>&lt;h2 id="从一个真实问题开始"&gt;从一个真实问题开始&lt;/h2&gt;&#10;&lt;p&gt;我经常在浏览器里看技术文章。看到好的想存到 Obsidian，复制粘贴格式全乱。打开&amp;quot;另存为&amp;quot;保存下来是带广告、导航栏、侧边栏的 HTML。想找一个干净的 Markdown 版本，要么没有，要么是闭源插件不敢用。&lt;/p&gt;&#10;&lt;p&gt;于是我开始想：我能不能自己写一个？&lt;/p&gt;&#10;&lt;p&gt;这是个典型的&amp;quot;想动手&amp;quot;时刻。但真正动手之前，有几个更前置的问题需要想清楚：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Chrome 插件到底是什么？和 userscript、网页工具、PWA 差在哪？&lt;/li&gt;&#10;&lt;li&gt;我想做的这个事，到底该用哪种形态？&lt;/li&gt;&#10;&lt;li&gt;学 Chrome 插件的&amp;quot;投资回报&amp;quot;如何？是一次性投入还是持续折腾？&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;写这篇文章的目的，是在你打开 &lt;code&gt;manifest.json&lt;/code&gt; 之前，帮你想清楚这三个问题。&lt;/p&gt;&#10;&lt;h2 id="插件是什么"&gt;插件是什么&lt;/h2&gt;&#10;&lt;p&gt;先把&amp;quot;插件&amp;quot;这个词拆开看。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Chrome 插件&lt;/strong&gt;（Chrome Extension），也叫浏览器扩展，本质上是一段运行在 Chrome 浏览器里的代码。它能访问一些普通网页拿不到的 API，比如读取当前标签页的 URL、修改请求头、在用户点击工具栏图标时弹出一个小页面。&lt;/p&gt;&#10;&lt;p&gt;可以把它理解为：&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;插件 = 对浏览器的扩展能力 + 对已有网站的增强能力&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;注意两个关键词：&lt;strong&gt;&amp;ldquo;对浏览器&amp;rdquo;&lt;/strong&gt; 和 &lt;strong&gt;&amp;ldquo;对已有网站&amp;rdquo;&lt;/strong&gt;。这两个词决定了插件能做什么、不能做什么。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;对浏览器&lt;/strong&gt;意味着插件能拿到浏览器层面的能力，比如：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;操作标签页（关闭、新建、切换）&lt;/li&gt;&#10;&lt;li&gt;读取和修改浏览器历史&lt;/li&gt;&#10;&lt;li&gt;拦截和修改网络请求&lt;/li&gt;&#10;&lt;li&gt;在工具栏添加图标&lt;/li&gt;&#10;&lt;li&gt;监听键盘快捷键&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;对已有网站&lt;/strong&gt;意味着插件的核心战场是&amp;quot;改造现有网站&amp;quot;，比如：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;给维基百科加一个深色模式&lt;/li&gt;&#10;&lt;li&gt;给 GitHub 加一个一键复制文件链接的按钮&lt;/li&gt;&#10;&lt;li&gt;给掘金、知乎、CSDN 屏蔽某些干扰元素&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;插件能做什么、不能做什么&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;能做的：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;改造已有网站（修改 DOM、注入脚本）&lt;/li&gt;&#10;&lt;li&gt;提供一个常驻工具栏入口（点击图标触发动作）&lt;/li&gt;&#10;&lt;li&gt;跨页面保存数据（用户的偏好、笔记、历史）&lt;/li&gt;&#10;&lt;li&gt;监听浏览器事件（标签页变化、下载事件）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;不能做（或做起来很费劲）：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;完全独立的产品（需要服务端配合的复杂功能）&lt;/li&gt;&#10;&lt;li&gt;移动端体验（Chrome 插件不适用于移动浏览器）&lt;/li&gt;&#10;&lt;li&gt;高性能要求的事（不适合跑复杂的计算任务）&lt;/li&gt;&#10;&lt;li&gt;跨浏览器一致体验（Firefox、Edge、Safari 各有差异）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="什么时候该用插件"&gt;什么时候该用插件&lt;/h2&gt;&#10;&lt;p&gt;给几个真实场景，帮你判断。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;适合用插件的场景：&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;改造已有网站&lt;/strong&gt;：给某个你不喜欢的网站加功能或去干扰&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;跨页面工具&lt;/strong&gt;：复制当前页面内容、抓取数据、自动填表&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;浏览器层的小工具&lt;/strong&gt;：标签页管理、下载管理、截图、翻译&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;给开发者自己用&lt;/strong&gt;：调试、API 测试、页面抓取&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;&lt;strong&gt;不适合用插件的场景：&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>