还在苦恼如何开发一个Chrome插件吗?十分钟带你实现一个实用小插件

这篇具有很好参考价值的文章主要介绍了还在苦恼如何开发一个Chrome插件吗?十分钟带你实现一个实用小插件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

你是否曾考虑过创建自己的 Chrome 插件,但又挠头毫无思路?那么在接下来的几分钟里,我不仅会介绍 Chrome
浏览器扩展的基本知识,还会指导你通过五个简单的步骤来制作自己的扩展。

知道怎么做吗?让我们一探究竟!

要做一个什么插件

今年我们见证了人工智能能力的爆炸式增长。虽然chatgpt能提供前所未有的帮助,但它们也提醒我们:不要与它分享敏感信息。
我不知道你怎么想,但很多时候,我的手指比我的大脑还快。因此,为了防止可能出现的失误,要为 ChatGPT 建立一个 “molly-guard”。
如果你正在挠头想知道什么是 “molly-guard”,它最初指的是放在按钮或开关上的防护罩,以防止意外启动。在我们的语境中,它是确保我们不会泄密的数字守护者。
用户可以指定他们认为敏感的单词或短语列表。如果我们试图向 ChatGPT 提交包含这些字词的信息,扩展程序就会立即行动,禁用提交按钮,使我们免于潜在的疏忽。
要学习本教程,你需要一个 ChatGPT 账户。
本教程的代码可在 GitHub 上获取

什么是谷歌浏览器扩展?

在开始之前,让我们先弄清楚什么是 Chrome 浏览器扩展。Chrome 浏览器扩展是一个小软件,旨在增强或修改 Chrome 浏览器的浏览体验。扩展使用标准的网络技术(HTML、JavaScript 和 CSS)开发,既有简单的工具(如颜色选择器),也有复杂的工具(如密码管理器)。许多扩展都可以在 Chrome 网上商店下载。

注:对于希望深入了解 Chrome 浏览器扩展的用户,谷歌的官方文档是非常宝贵的资源。

值得注意的是,谷歌 Chrome 浏览器扩展程序可以根据其预期功能采取不同的形式。有些具有浏览器操作功能,在地址栏旁边有一个图标,可以快速访问其功能。其他扩展则可能在后台悄无声息地运行,跨越所有网页或仅在特定网页上运行,这取决于它们的设计。

在本教程中,我们将重点介绍使用内容脚本的扩展类型。该脚本允许我们与特定页面的 DOM 进行交互和操作,在我们的例子中就是 ChatGPT 界面。

第 1 步:创建扩展文件

首先,我们需要为 Chrome 浏览器扩展设置基本结构。我们的扩展名为 chatgpt-mollyguard,将放在一个专用文件夹中。该扩展目录将包含所有必要文件,使我们的 molly-guard 顺利运行。

下面是详细说明:

  • 文件夹:chatgpt-molly-guard。这是我们扩展的根目录。我们的所有文件都将放在这个文件夹中。
  • 文件:manifest.json。这是我们扩展的核心和灵魂。该文件包含扩展的元数据,如名称、版本和所需权限。最重要的是,它指定了在哪些网站上运行哪些脚本。
  • 文件:contentScript.js。顾名思义,这个 JavaScript
    文件包含内容脚本。该脚本可直接访问网页内容,允许我们扫描敏感词并根据需要修改页面。
  • 文件:wordsList.js。这是一个 JavaScript
    文件,专门用于包含用户指定的敏感词或短语列表。我们将其分开,方便用户自定义列表,而无需深入研究 contentScript.js
    中的核心功能。
  • 文件:styles.css。为我们的扩展添加一些特色的样式表。虽然我们的主要目标是功能性,但让警告或提示看起来更美观!

1.在电脑上新建一个文件夹,命名为 chatgpt-molly-guard。
2.在这个文件夹中,创建上面列出的四个文件。
3.文件准备好后,我们就可以开始填写细节了。
还在苦恼如何开发一个Chrome插件吗?十分钟带你实现一个实用小插件,chrome,前端

在接下来的章节中,我们将深入研究每个文件,并概述其在扩展中的具体作用。

第 2 步:创建任务文件

manifest.json是一个 JSON 文件,用于向浏览器提供有关扩展的基本详细信息。该文件必须位于扩展的根目录中。

下面是我们的清单结构。将此代码复制到 manifest.json:

{
  "manifest_version": 3,
  "name": "ChatGPT Molly-guard",
  "version": "1.0",
  "description": "Prevents submission if specific words are typed into chat window",
  "content_scripts": [
    {
      "matches": ["https://chat.openai.com/*"],
      "css": ["styles.css"],
      "js": ["wordsList.js", "contentScript.js"]
    }
  ]
}

manifest.json有三个必填字段,即:manifest_version、name 和 version。其他都是可选项。
关键要素
关键清单元素

  • manifest_version:一个整数,指定清单文件格式的版本。我们使用的是最新版本的 Manifest V3。请注意,谷歌将在
    2023 年逐步淘汰 Manifest V2 扩展。
  • name:一个简短的纯文本字符串(最多 45 个字符),用于标识扩展。
  • version:一至四个以点分隔的整数,用于标识扩展的版本。 description:描述扩展的纯文本字符串(无 HTML,最多 132
    个字符)。
  • content_scripts:此关键字用于指定静态加载的 JavaScript 或 CSS 文件,在每次打开与 URL 模式(由
    matches 关键字指定)匹配的页面时使用。在此,我们表示脚本应在以 chat.openai.com/ 开头的任何 URL 上运行。
  • 在上述字段中,Google 会在 Chrome 浏览器的扩展管理页面()和 Chrome 网上商城显示扩展时使用名称、版本和描述。

虽然我们的manifest_version已根据需要进行了精简,但许多其他字段可以为扩展增加深度和功能。诸如 action、default_locale、icon 等字段可提供自定义选项、用户界面控制和国际化支持。
如需全面了解 manifest.json 文件中的可用内容,请查阅 Google 官方文档。

第 3 步:创建内容脚本

Chrome 浏览器扩展中的内容脚本是在网页上下文中运行的 JavaScript 文件。它们可以查看和操作所运行页面的 DOM,从而修改网页的内容和行为。

这就是我们的内容脚本。将以下代码复制到 contentScript.js 文件中:

const debounce = (callback, wait) => {
  let timeoutId = null;
  return (...args) => {
    window.clearTimeout(timeoutId);
    timeoutId = window.setTimeout(() => {
      callback.apply(null, args);
    }, wait);
  };
};

function containsForbiddenWords(value) {
  return forbiddenWords.some(word => value.toLowerCase().includes(word.toLowerCase()));
}

function updateUI(target) {
  const containsForbiddenWord = containsForbiddenWords(target.value);
  const sendButton = target.nextElementSibling;
  const parentDiv = target.parentElement;

  if (containsForbiddenWord) {
    sendButton.disabled = true;
    parentDiv.classList.add('forbidden-div');
  } else {
    sendButton.disabled = false;
    parentDiv.classList.remove('forbidden-div');
  }
}

document.body.addEventListener('keyup', debounce((event) => {
  if (event.target.id === 'prompt-textarea') updateUI(event.target);
}, 300));

document.addEventListener('keydown', (e) => {
  if (e.target.id === 'prompt-textarea' && e.key === 'Enter') {
    if (containsForbiddenWords(e.target.value)) {
      e.stopPropagation();
      e.preventDefault();
    }
  }
}, true);

在文件顶部,我们声明了一个防抖函数。用它来确保不会在用户每次按键时都检查是否有禁用词。那样会有很多检查!相反,我们会等到用户停止键入后再做任何事情。
接下来是 containsForbiddenWords 函数。顾名思义,如果传入的文本中包含任何禁用词语,该函数将返回 true。我们对两个值都使用了小写,以确保比较不区分大小写。
updateUI 函数将确定聊天框中是否存在任何禁用词语。如果有,它会禁用发送按钮,并在聊天框的父 div 中添加 CSS 类 (forbidden-div)。在下一步中利用它为用户提供视觉警告提示。
最后,脚本注册了两个事件监听器:
第一个被设置为在按键事件中触发。它会检查修改后的元素是否是目标(聊天窗口),然后调用 updateUI 函数。由于使用了防抖功能,该函数不会持续运行,只会在输入过程短暂停顿后运行。
第二个事件监听器正在监听目标上的按键事件。具体来说,它正在监听 Enter 键的按下,如果在文本区域出现禁用单词时按下 Enter 键,就会阻止浏览器的默认操作(在本例中是表单提交)。
通过禁用发送按钮和拦截并阻止回车键的按下,这样就能有效阻止含有禁用词的邮件发送。
我们使用了事件委托,因为 ChatGPT 界面是一个 SPA。在 SPA 中,用户界面的片段会根据用户交互动态替换,这可能会无意中分离绑定到这些元素的任何事件侦听器。通过将事件侦听器锚定到更广泛的 DOM 并有选择性地针对特定元素,我们可以规避这个问题。

步骤 4:添加一些样式

虽然我们扩展的核心功能是阻止某些提交,但重要的是让用户能够立即识别他们的操作被阻止的原因。让我们添加一些样式来提供视觉提示,增强用户体验。

下面是我们使用的规则。将其添加到 styles.css 文件中:

.forbidden-div {
  border: 2px solid red !important;
  background-color: #ffe6e6 !important;
}

只要检测到禁用词,就会在输入区域添加醒目的红色边框和细微的红色背景。这将立即引起注意,并表明情况不对。通过切换父 div 上的类,我们可以轻松地打开或关闭该功能。
重要标记也值得注意。在处理不属于自己的网页时,比如本例中的 ChatGPT,现有的样式可能非常特殊。为了确保我们的样式优先并被正确应用,!!important 标记会覆盖由于现有样式的特殊性而导致的任何潜在冲突。

步骤 5:测试扩展

有最后一步:填充我们的扩展应该监控的禁用词列表。我们可以在 forbiddenWords.js 中添加这些内容:

const forbiddenWords = [
  "政治",
  "股票",
  "Jim",
];

现在,我们的自定义 Google Chrome 浏览器扩展已全部设置完毕,是时候测试其功能并确保一切正常。

打开 Chrome 浏览器,在地址栏中导航到。
打开右上角的 "开发者模式 "切换开关。
单击 "加载解压缩 "按钮,现在该按钮将可见。
导航并选择扩展的目录(本例中为 chatgpt-molly-guard),然后单击 “选择”。现在我们的扩展应该会出现在已安装的扩展列表中。

还在苦恼如何开发一个Chrome插件吗?十分钟带你实现一个实用小插件,chrome,前端
还在苦恼如何开发一个Chrome插件吗?十分钟带你实现一个实用小插件,chrome,前端
现在,要测试功能,请导航到 ChatGPT,刷新页面并尝试输入限制词语,看看扩展是否按预期运行。

如果一切按计划进行,你应该会看到下图所示的内容。
还在苦恼如何开发一个Chrome插件吗?十分钟带你实现一个实用小插件,chrome,前端
如果您对扩展代码进行了任何更改,例如更新了单词列表,请务必点击扩展页面上扩展卡右下角的圆形箭头。这将重新加载扩展。然后,你需要重新加载扩展所针对的页面。

还在苦恼如何开发一个Chrome插件吗?十分钟带你实现一个实用小插件,chrome,前端

更进一步

我们目前的 Chrome 浏览器基本扩展功能已达到预期目的,但仍有改进的余地。如果你渴望进一步完善扩展功能并扩展其功能,下面有一些建议。

  1. 编辑单词列表的用户界面
    目前,我们的扩展依赖于预定义的限制词语列表。实施一个用户友好型界面可以让用户随时动态添加、删除或修改单词。这可以通过点击扩展图标时弹出的用户界面(浏览器操作)来实现,用户可以在该界面上管理自己的列表。您还需要将单词持久保存到存储器中。
  2. 处理鼠标粘贴事件
    虽然我们的扩展会检测按键,但用户可以通过使用鼠标右键菜单粘贴敏感信息来绕过这一点。为了堵住这个漏洞,我们可以为粘贴事件添加一个事件监听器(或者将两者合并为输入监听器)。这将确保无论是输入还是粘贴信息,过滤器都能保持稳健。
  3. 上下文覆盖 阻止某些术语可能有点过于笼统。例如,我可能想阻止提及 “Jim”,但提及 "Jim Carey
    "却没有问题。要解决这个问题,可以考虑引入一项功能,在下一次提交事件发生之前禁用 “molly-guard”。

结论

正如我们所发现的,创建自己的 Google Chrome 浏览器扩展并不是一件让你挠头很难的事情。我们一开始就有一个明确的目标:为 ChatGPT 创建一个保护层,确保敏感信息的机密性。在本教程中,我们看到了如何通过少量文件和代码来创建一个功能实用的浏览器扩展。
对于那些渴望深入学习的人来说,谷歌的 Chrome 浏览器扩展官方文档是一个很好的起点。此外,Chrome 浏览器扩展迁移指南还提供了关于向 Manifest V3 过渡的见解,鉴于 Manifest V2 即将于 2023 年淘汰,这一点至关重要。文章来源地址https://www.toymoban.com/news/detail-690787.html

到了这里,关于还在苦恼如何开发一个Chrome插件吗?十分钟带你实现一个实用小插件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Alist安装教程,十分钟搭建一个属于自己的网盘系统

    不想看文档的的,可以看bilibili上的视频教程:网盘这样用,也太爽了!- 神器 AList 详细使用教程 | 网盘整合、在线播放、WebDAV_哔哩哔哩_bilibili 官网地址:https://alist.nn.ci/ AList是一个支持多种存储,支持网页浏览和 WebDAV 的文件列表程序,由 gin 和 Solidjs 驱动。简单的来说就是

    2024年02月04日
    浏览(43)
  • 十分钟教你在 k8s 中部署一个前后端应用

    转载至我的博客https://www.infrastack.cn ,公众号:架构成长指南 大家好,我是蜗牛哥,好多开发人员,尤其是没接触过 k8s 的人员对如何在k8s中部署一个 前后端应用很模糊,不知如何下手,所以本篇讲一下如何快速在 k8s 部署一个前后端应用,让大家对k8s有个快速认识 k8s集群,

    2024年02月02日
    浏览(35)
  • 十分钟带汝入门大数据开发语言Scala

    大家好,我是百思不得小赵。 创作时间:2022 年 6 月 7 日 博客主页: 🔍点此进入博客主页 —— 新时代的农民工 🙊 —— 换一种思维逻辑去看待这个世界 👀 今天是加入CSDN的第1193天。觉得有帮助麻烦👏点赞、🍀评论、❤️收藏 Scala是一门多范式的编程语言,一种类似Ja

    2024年02月02日
    浏览(46)
  • 十分钟配置好Neovim go开发环境(其他语言一样)

    这篇文章的目的是为了分享下我自己的 Neovim 配置。 本人是Golang程序员,最开始使用的IDE是 JetBrains Goland 。有一说一这个ide适配度很高,认识的很多人都使用这个。但是它也有几个对我来说的缺点: 内存占用度高,我个人电脑配置不太跟的上 费用较高(DDDD) 去年的时候换了

    2024年02月15日
    浏览(43)
  • 十分钟在 macOS 快速搭建 Linux C/C++ 开发环境

    有一个使用了 Epoll 的 C 项目,笔者平时用的 Linux 主力开发机不在身边,想在 macOS 上开发调试,但是没有 Linux 虚拟机。恰好,JetBrains CLion 的 Toolchains 配置除了使用本地环境,还支持 SSH、Docker。 笔者使用 CLion + Docker Desktop,不到十分钟就能在 macOS 上搭建一个能够开发使用 L

    2024年02月08日
    浏览(40)
  • 十分钟学会开发自己的Python AI应用【OpenAI API篇】

    最近 OpenAI 宣布 ChatGPT 将很快推出他们的 API。虽然我们不知道这需要多长时间,但这之前我们可以熟悉下OpenAI API,快速开发自己的AI应用! 通过今天学习 OpenAI API,你将能够访问 OpenAI 的强大模型,例如用于自然语言的 GPT-3、用于将自然语言翻译为代码的 Codex 以及用于创建和

    2024年04月25日
    浏览(27)
  • 【微信小程序项目】——十分钟开发网络API·天气查询小程序、天气查询,美观简约,简单易上手

    【实验目的】 复习小程序项目 的 新建过程 掌握 配置https域名的方式 使用微信 网络请求能力获取天气预报 使用腾讯提供的网络通信API,调用第三方提供的API PART I 准备工作 A PI 密钥申请( 非必做 ) 本小节主要介绍如何申请获得开源API的密钥。这里选择了可以提供全球气象

    2023年04月20日
    浏览(43)
  • 还在为没机器练手搭集群而苦恼?快进来免费领机器了!

    前几天,在我们的技术交流群里看到有小伙伴问:有没有练手搭建Redis集群的方式推荐: 这里不禁让我想到,对于各种集群和分布式基础设施的搭建,其实是每个开发者进阶时候都要经历的一个成长过程。但是,这里对于不少开发者来说,却又面临着一个现实问题: 我没有足

    2024年02月08日
    浏览(40)
  • 十分钟入门Zigbee

    大部分教程通常都是已Zigbee原理开始讲解和学习,各种概念让初学者难以理解。本教程从一个小白的角度出发,入门无需任何Zigbee底层原理知识,只需要基本的MCU研发经验就可以掌握,让您快速实现zigbee组网和节点之间通信。 本教程采用泰凌微TLSR8258芯片,芯片资料链接TLS

    2023年04月09日
    浏览(58)
  • 每天十分钟学会Spark

    Spark是什么 Spark是一种基于内存的快速、通用、可拓展的大数据分析计算引擎。 Spark官网:http://spark.apache.org/ Spark的特点 1、快速   一般情况下,对于迭代次数较多的应用程序,Spark程序在内存中的运行速度是Hadoop MapReduce运行速度的100多倍,在磁盘上的运行速度是Hadoop MapRedu

    2024年03月18日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包