可选择注入内容脚本

2023-12-10

内容脚本可以通过在扩展清单文件中声明以编程方式或永久注入。程序注入需要主机权限,通常由浏览器或页面操作授予。

在我的用例中,我想注入 gmail、outlook.com 和 yahoo 邮件网站,而无需用户操作。我可以通过声明所有这些清单来做到这一点,但这样做需要对这些帐户的所有数据访问权限。有些用户可能只想授予 Outlook.com,而不授予 Gmail。编程注入不起作用,因为我需要知道何时注入。使用选项卡权限还需要另一个权限。

有没有什么好的方法可以选择性地注入网站?


如果没有适当的权限,您无法在站点上运行代码。幸运的是,您可以添加主机权限optional_permissions在清单文件中声明它们是可选的,并且仍然允许扩展使用它们。

为了响应用户手势,您可以使用chrome.permission.request请求额外的权限。此 API 只能在扩展页面(后台页面、弹出页面、选项页面等)中使用。从 Chrome 36.0.1957.0 开始,所需的用户手势也从内容脚本中继承,因此如果您愿意,您可以从内容脚本添加单击事件侦听器并使用chrome.runtime.sendMessage将请求发送到后台页面,后台页面依次调用chrome.permissions.request.

选项卡中可选的代码执行

获得主机权限(可选或强制)后,您必须以某种方式在匹配的页面中注入内容脚本(或CSS样式)。有几个选项,按照我的喜好排列:

  1. Use the chrome.declarativeContent.RequestContentScript在页面中插入内容脚本的操作。读文档如果您想了解如何使用此 API。

  2. Use the webNavigationAPI(例如chrome.webNavigation.onCommitted)来检测用户何时导航到该页面,然后使用chrome.tabs.executeScript在选项卡中插入内容脚本(或chrome.tabs.insertCSS插入样式)。

  3. Use the tabs API (chrome.tabs.onUpdated)来检测页面可能已更改,并使用以下命令在页面中插入内容脚本chrome.tabs.executeScript.

我强烈推荐选项 1,因为它是专门为此用例设计的。注意:此 API 是在 Chrome 38 中添加的,但仅适用于可选权限自 Chrome 39 起。尽管 ”警告:此操作仍处于实验阶段,稳定版本的 Chrome 不支持。“在文档中,该 API 实际上是在稳定版上受支持的。最初的想法是在稳定版上发布 API 之前等待审核,但该审查从未到来,所以现在这个 API 已经正常工作了近两年了。

第二个和第三个选项类似。两者之间的区别在于使用webNavigationAPI 添加了额外的权限警告(“读取您的浏览历史记录”)。对于此警告,您可以获得一个可以有效过滤导航的 API,因此chrome.tabs.executeScript可以最大程度地减少通话次数。

如果您不想在权限对话框中放置此额外的权限警告,那么您可以盲目地尝试在每个选项卡上注入。如果你的扩展有权限,那么注入就会成功。否则,就会失败。这听起来不太高效,而且也不是……从好的方面来说,这种方法不需要任何额外的权限。

通过使用后两种方法中的任何一种,您的内容脚本的设计方式必须能够处理多个插入(例如有警卫)。还支持插入框架(allFrames:true),但前提是您的扩展程序被允许访问选项卡的 URL(或者框架的 URL,如果frameId已设置)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可选择注入内容脚本 的相关文章

  • 从数组随机 URL 重定向

    政治动物 contentscript js 加载到清单 json 中列出的每个页面上 该插件将新闻网站网站上的所有图像替换为以下图片 穿西装的动物 作为对新闻的评论 专为 Web 2 打造 2013 年 11 月 20 日 随机图像数组 v
  • Chrome 扩展已禁用“此扩展可能已损坏”Chrome 63.0.3239.84

    我有一个私有 Chrome 扩展程序 可以打开一个文本框并使用文本框中的输入在新选项卡中打开 URL 它一直工作正常 直到上周末 Chrome 更新提示新的 此扩展程序可能已损坏 错误 在 Windows 上 Chrome 将禁用该扩展 在
  • Firefox Web 扩展“无法访问死对象”错误

    我很难找到这个问题的最新答案 并且经常没有时间在这里回答问题 所以我想我会发布这个 这样我就可以回答我自己的问题 因为我找到了解决方案 我正在为 Chrome 和 Firefox 制作一个 Web 扩展 Firefox 有一个问题 当我从选
  • 将文本替换为带有 chrome 扩展的链接

    我正在尝试用链接替换网页上的文本 当我尝试这样做时 它只是用标签替换文本 而不是链接 例如 此代码将用以下内容替换 河流 a href http www cnn com asdf a 这是我到目前为止所拥有的 function handle
  • 将json保存到chrome存储/本地存储

    我想将 json 保存到 chrome 或本地存储 我还需要能够添加项目而不丢失其他项目 Updated var local function var setData function key obj var values JSON str
  • 如何在 Chrome 扩展中加载 Google Analytics 和 Facebook SDK?

    我正在使用 Kango 框架开发 chrome 扩展 我想同时使用 Google Analytics 和 facebook SDK 我编辑了清单文件以包含以下内容 content security policy script src sel
  • chrome.storage 在 chrome 扩展中未定义

    我正在开发一个 Google Chrome 扩展程序 并且已经为此工作了一段时间 所以它已经安装了一段时间 我更新了清单文件以包含 存储 权限并重新加载扩展 但是 当我在控制台中尝试时 chrome storage is undefined
  • chrome 扩展,弹出窗口的高度

    在我看来 弹出窗口的高度有 489 像素的限制 如果我将弹出窗口的主体元素设置为 600 像素的高度 则弹出窗口将获得一个滚动条 因为内部页面变大 但弹出窗口不会更改其大小 是否可以使弹出窗口的高度大于 489 像素 Set height两
  • 在 Chrome 扩展中,有没有一种方法可以以编程方式“单击”pageAction 按钮

    我有一个带有 pageAction 按钮的 Chrome 扩展程序 用户单击它 就会显示 popup html 窗口 以便用户可以执行需要的操作 有没有一种方法可以装饰页面上的链接 以便当用户单击该链接时 它会以编程方式向 pageActi
  • Chrome 扩展:提交后修改 facebook-chat 中的消息文本

    我正在尝试创建一个 Chrome 扩展程序 当用户在聊天框中按 Enter 键时 该扩展程序会修改提交的消息 文本区域的 HTML 代码
  • Chrome 打包应用程序与 SQLite?

    我试图整合sql js 基于JS的SQLitehttps github com kripken sql js https github com kripken sql js 进入我的 Chrome 应用程序 但当我启动我的应用程序时 控制台
  • 在页面显示到屏幕之前删除 DOM 元素(在 Chrome 扩展中)

    我正在尝试创建一个扩展 该扩展将在页面显示到屏幕上之前删除某些页面元素 按 id 或类 我尝试在文档上使用事件侦听器 以 DOMContentLoaded 作为事件 但 javascript 似乎在页面显示给用户后执行 然后删除它 所以它不
  • 内容脚本仅在重新加载/刷新时加载

    这是我第一次创建 Google Chrome 扩展程序 我无法找到一种方法来可靠地让内容脚本在单击 YouTube 上的建议视频或任何相关视频时运行一次 我尝试将 all frames 设置为 true 但这会多次调用脚本 浏览 YouTu
  • 使用 page_action 时不出现弹出窗口

    我是 Google Chrome 扩展开发的新手 我有以下两个疑问 我使用时没有出现弹出窗口page action在manifest json中 但在我使用时出现browser action 我想知道为什么 还是我做错了 该图标也显示为非活
  • 将 chrome api 与 React.js 结合使用

    我一直在尝试使用 React 制作一个简单的 Chrome 扩展 清单看起来像这样 name New Tab version 1 0 manifest version 2 description A minimalist replaceme
  • 打开 Chrome 扩展程序时出现 Service Worker TypeError

    当我打开 WAVE Web 可访问性评估工具 扩展时 我的服务工作人员在 Chrome 中抛出此错误 未捕获 承诺中 类型错误 请求方案 chrome extension 是 不支持的 在 sw js 52 匿名 sw js 52 Prom
  • 对于某些文件,通过 NPAPI 浏览器的 Office 授权插件在 Chrome 中打开 webdav 文件失败

    好吧 这是一个棘手的问题 因为它涉及很多变量 一个 webdav 服务器 我使用了 webdav net 服务器 http www webdavsystem com server http www webdavsystem com serv
  • Javascript:自动点击按钮?

    我正在学习如何编写 chrome 扩展 而且我对 javascript 还很陌生 这是一些 html div class button data a class button1 whiteColor href http link1 com
  • 使 Chrome 扩展弹出窗口透明

    我正在写一个 chrome 扩展 我想知道是否有办法使弹出窗口透明 即即使弹出窗口覆盖当前页面 用户也可以看到当前页面的内容 谢谢你 昨天我想到了一个有趣的想法 虽然你不能删除白色背景 但你仍然可以mimic透明背景 这可以通过在打开弹出窗
  • Chrome 扩展程序可以相互通信吗?

    我正在编写一个Chrome扩展程序 并且想要实现一个接口或api 以便我将来制作的其他扩展程序可以使用它 最终的效果可能如下 分机 B 呼叫extensionA someMethod someParameters 并向分机A发送一些数据 分

随机推荐

  • 多任务模型的自定义损失

    我正在微调 keras 模型 该模型为 3 个子任务输出 3 个不同的预测 模型输出是一个列表 out batch size 5 batch size 6 batch size 6 我只想计算第三个输出的分类交叉熵损失 所以我定义了一个简单
  • 检测 UIImageView 上的触摸事件

    我在 UIView 上放置了 4 个 UIImageView 并给它们命名 UIImageView myImg1 UIImageView alloc init UIImageView myImg2 UIImageView alloc ini
  • 在 Visual Studio Code 中调试 Python 时如何使用“跳转到光标”调试器命令

    Python调试器支持跳转命令来设置下一行执行 在 VS Code 中调试 Python 代码时可以使用此功能吗 vscode v1 36 增加了这个 跳转到光标 功能 参见调试 跳转到发行说明中的 光标 跳转到光标处 我们添加了一个新的调
  • 初始化 2D 对象数组时出现空指针异常 [Java]

    我正在尝试制作 2D 图块游戏 在制作保存图块的数组时 我收到 NullPointerException 这里是一些代码 抱歉 如果格式不正确 第一次 公开课世界 holds data for where to place images a
  • 有任何代码/库可以缩小 UIImage 吗?

    是否有任何代码或库可以帮助我缩小图像 如果你用iPhone拍照 它的像素大约是2000x1000 这对网络不太友好 我想将其缩小为 480x320 有什么提示吗 这就是我正在使用的 效果很好 我肯定会关注这个问题 看看是否有人有更好 更快的
  • Ember — 观察记录的创建/删除

    假设我有 2 组独立的控制器 模型 Dog and Cat 现在 每当我创建新的Cat记录 或删除现有的 我想要Dog控制器观察记录的创建 删除以及新记录的创建 删除Cat记录已创建我希望它触发一些操作 例如console log Bark
  • JOINS、EXISTS 或 IN 哪个更好?关于SQL的几个问题

    我有几个关于 SQL 的问题 如何分析一个人的表现 询问 任何内置软件 MSSQL Server 2005 2008 的功能 应该用什么来代替in在查询中这样性能更好 例如 选择 来自查询 课程 在哪里 查询 ID 输入 从查询中选择 en
  • 如何从 otf 或 ttf 文件获取字体名称?

    我在之前的应用程序中使用了自定义字体 文件名是 ProximaNova Regular otf 并加载我刚刚使用的字体 UIFont fontWithName ProximaNova Regular size 20 这非常有效 现在在这个新
  • java jaxb 是如何工作的?

    只是好奇 jaxb 是如何工作的 我有一个注释如下的类 XmlRootElement name MyJaxb Class MyJaxb XmlElement protected String str public void setStr S
  • 如何获取.NET Core 2.0中登录用户的用户ID?

    我使用 NET Core 和 MVC 创建了一个 Angular 2 应用程序 我想知道用户的登录ID 如何在 net core中获取用户的登录ID 这是我的第一个角度应用程序 我使用以下链接开始https blogs msdn micro
  • 通过增强现实寻找餐馆和旅游景点

    在我的应用程序中 我想使用增强现实来查找家庭餐馆等地方 我想要做的是 当我启动应用程序时 相机打开 然后我想找到相机方向的位置 例如 我启动应用程序 我面向东方 手机键盘面向我 即西方 然后是东方向的地方 我已经编写了一些启动相机的代码 请
  • 如何正确地将事件附加到jqGrid“列选择器”的“关闭对话框”?

    我在正确使用 jqGrid 的列选择器插件 小部件的关闭对话框事件时遇到一些问题 这就是我所拥有的 我从 jqGrid 初始化开始 最后附加了列选择器 如下所示 ticketsTable tableWrap jqGrid url datat
  • ASP.NET MVC - 服务器软件要求?

    我今天刚刚了解了 asp net mvc 我想知道服务器端需要什么来托管它 我想是 IIS 6 及更新版本 和 NET 3 5 您还需要什么吗 来自 MSDN 如何 部署 ASP NET MVC 应用程序 基本上你需要 NET 3 5 Sy
  • RoR 4 中带有验证的正则表达式

    有如下代码 class Product lt ActiveRecord Base validates title description image url presence true validates price numericalit
  • 将 Identity 2.0 函数移至存储库类

    我在我的应用程序中使用 Identity 2 0 并希望将数据功能移动到存储库层 例如以下代码 public class ApplicationDbInitializer DropCreateDatabaseIfModelChanges
  • 如何避免列表之间出现双边框?

    我正在使用列表视图 其中有一个引用可绘制 列表的 xml 如下所示
  • 如何启动 Android GCM 令牌刷新?

    根据docs 保护客户端应用程序和应用程序服务器免受潜在恶意攻击 重复使用注册token 应定期发起token 从服务器刷新 当 GCM 注册令牌刷新时 从服务器端启动 客户端应用程序必须处理 tokenRefreshed 消息与 GCM
  • 如何正确启动 Angular Universal 到实时服务器

    我通过修改此处找到的通用启动器种子来设置和工作网站 https github com angular universal starter我已经让我的网站在 localhost 节点服务器上工作 呈现 HTML 现在我已经安装了 SSH 连接
  • jQuery fullCalendar 和 qTip

    我正在考虑使用 fullCalendar 并使用 qTip 使用 eventMouseover 显示描述 有没有人设法做到这一点或知道解决方案 我已经谷歌搜索并尝试实施这个帖子但我没有任何快乐 我唯一一次让它工作时它陷入了循环并导致我的浏览
  • 可选择注入内容脚本

    内容脚本可以通过在扩展清单文件中声明以编程方式或永久注入 程序注入需要主机权限 通常由浏览器或页面操作授予 在我的用例中 我想注入 gmail outlook com 和 yahoo 邮件网站 而无需用户操作 我可以通过声明所有这些清单来做