0

0

如何让 Chrome 扩展持久化用户按钮操作并自动生效

聖光之護

聖光之護

发布时间:2026-03-08 23:07:03

|

742人浏览过

|

来源于php中文网

原创

如何让 Chrome 扩展持久化用户按钮操作并自动生效

本文介绍如何通过 chrome.storage 实现用户操作(如点击“Omit”按钮)的跨会话持久化,并在页面加载时自动触发对应过滤逻辑,同时集成远程敏感词 API 实现实时更新能力。

本文介绍如何通过 `chrome.storage` 实现用户操作(如点击“omit”按钮)的跨会话持久化,并在页面加载时自动触发对应过滤逻辑,同时集成远程敏感词 api 实现实时更新能力。

在开发内容过滤类 Chrome 扩展时,一个关键用户体验需求是:用户一旦启用“Omit”(屏蔽)功能,该设置应自动延续至后续页面刷新、标签页重开乃至新浏览器会话,而非每次手动重复点击。这需要将用户意图(即“已启用过滤”状态)可靠地持久化,并在页面注入脚本中主动读取、响应。

✅ 推荐方案:使用 chrome.storage.local(优于 localStorage)

虽然 window.localStorage 在部分场景下可用,但它受限于当前网页源(origin),且在扩展 content script 中可能因沙箱策略或跨域限制而不可靠。Chrome 官方推荐且更健壮的方式是使用 chrome.storage.local —— 它专为扩展设计,支持异步读写、跨源共享、自动同步(可选),且不受网页上下文隔离影响。

1. 在 content script 中保存与读取状态

假设你的 UI 按钮位于弹出页(popup)或页面内注入的工具栏中,而过滤逻辑运行在 content script 中。你需要在两者间协调状态:

AI-Text-Classifier
AI-Text-Classifier

OpenAI官方出品,可以区分人工智能书写的文本和人类书写的文本

下载
// content-script.js(注入到目标网页)
// 页面加载时检查是否已启用 Omit 功能
chrome.storage.local.get(['omitEnabled'], (result) => {
  if (result.omitEnabled === true) {
    filterInappropriateContent(); // 执行过滤逻辑
  }
});

// 监听来自 popup 或 background 的状态变更(可选,用于实时响应)
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
  if (request.action === 'toggleOmit') {
    chrome.storage.local.set({ omitEnabled: request.enabled }, () => {
      if (request.enabled) filterInappropriateContent();
    });
  }
});

2. 在 popup 或 UI 脚本中触发状态切换

// popup.js 或注入 UI 的 JS
document.getElementById('omitButton').addEventListener('click', async () => {
  const { omitEnabled = false } = await chrome.storage.local.get('omitEnabled');
  const newStatus = !omitEnabled;

  await chrome.storage.local.set({ omitEnabled: newStatus });

  // 向当前活动标签页的 content script 发送指令(确保过滤立即生效)
  chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => {
    if (tabs[0]) {
      chrome.tabs.sendMessage(tabs[0].id, {
        action: 'toggleOmit',
        enabled: newStatus
      });
    }
  });
});

3. 集成动态敏感词 API(如 Ninja APIs)

为实现“持续更新的词库”,你可在后台脚本(background.js)中定期拉取最新屏蔽词列表,或在每次过滤前调用 API 实时检测。以下是以 Ninja Profanity Filter API 为例的异步过滤封装:

// utils.js(供 content script 调用)
async function filterTextWithAPI(text) {
  try {
    const response = await fetch(
      `https://api.api-ninjas.com/v1/profanityfilter?text=${encodeURIComponent(text)}`,
      {
        method: 'GET',
        headers: {
          'X-Api-Key': 'YOUR_API_KEY_HERE' // ⚠️ 务必在 manifest.json 中声明 host permissions,且密钥不应硬编码在前端!建议通过 background service proxy 请求
        }
      }
    );
    const result = await response.json();
    return result.filtered_text || text;
  } catch (err) {
    console.warn('Profanity API failed, falling back to local filter:', err);
    return text.replace(/(damn|stupid|idiot)/gi, '[REDACTED]'); // 本地兜底
  }
}

// 在 filterInappropriateContent() 中调用:
async function filterInappropriateContent() {
  const paragraphs = document.querySelectorAll('p, div, span');
  for (const el of paragraphs) {
    if (el.textContent.trim()) {
      const cleaned = await filterTextWithAPI(el.textContent);
      el.textContent = cleaned;
    }
  }
}

? 安全提示:API 密钥切勿直接暴露在 content script 或 popup 前端代码中。最佳实践是通过 chrome.runtime.sendMessage 将文本发送至 background.js,由后台脚本携带密钥发起请求并返回结果,避免密钥泄露。

? 注意事项与进阶建议

  • 权限声明:在 manifest.json 中添加必要权限:
    "permissions": ["storage", "activeTab"],
    "host_permissions": ["https://api.api-ninjas.com/*"]
  • 性能优化:避免对整个 DOM 实时监听;可结合 MutationObserver 懒加载处理新插入的内容。
  • 用户控制权:提供“禁用此站点”选项,并按域名存储状态(如 chrome.storage.local.set({ 'omitEnabled_example.com': true }))。
  • 隐私合规:若过滤涉及用户生成内容上传,需明确告知并获得授权,符合 GDPR / CCPA 等规范。

通过 chrome.storage.local 持久化状态 + 模块化过滤逻辑 + 安全的 API 集成,你的扩展即可真正实现“一次设置,长期生效,智能更新”的专业体验。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

454

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

331

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

1051

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

830

2023.11.06

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

530

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

556

2023.07.28

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

59

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号