如何使用 Google Chrome 扩展更改所选文本的 CSS

2023-12-01

我正在为 Chrome 浏览器制作一个扩展,它使用 contextMenus 来更改所选文本的 CSS。

但我无法访问 HTML 结构,即所选文本的父节点,就像在本示例中可以轻松做到的那样。

var selection = window.getSelection();

如果在浏览器中默认使用,这将返回所选文本的父节点,我稍后可以用它来更改 CSS。

如何使用 Chrome 浏览器扩展来实现这一点?


由于 Chrome 不允许您使用上下文菜单与您单击的元素进行交互,因此您必须创建一个内容脚本它存储页面上右键单击的最后一个元素,因此当用户右键单击任何元素时,您将能够使用它。

首先你必须创建一个save_last_element.js内容脚本,如下所示:

var LAST_SELECTION,
    LAST_ELEMENT;

document.body.addEventListener('contextmenu', function(e) {
    LAST_SELECTION = window.getSelection();
    LAST_ELEMENT = e.target;
    // this will update your last element every time you right click on some element in the page
}, false);

然后你将它添加到你的manifest.json:

"permissions": ["*://*/*"],
"content_scripts": [
    {
        "matches": ["*://*/*"],
        "js": ["/path/to/save_last_element.js"],
        "run_at": "document_idle",
        "all_frames": true
    }
]

现在,当在页面中注入脚本时,您将能够使用LAST_SELECTION and LAST_ELEMENT变量来引用最后一个右键单击的元素并编辑其 CSS 或任何您想要的内容。

In your background.js你应该这样做:

function handler(info, tab) {
    // here you can inject a script inside the page to do what you want
    chrome.tabs.executeScript(tab.id, {file: '/path/to/script.js', allFrames: true});
}

chrome.runtime.onInstalled.addListener(function() {
    chrome.contextMenus.create({
        "title": "Some title",
        "contexts": ["all"],
        "documentUrlPatterns": ["*://*/*"],
        "onclick": handler
    });
});

注意上下文菜单正在注册内chrome.runtime.onInstalled监听器,因为上下文菜单注册是持久的,并且只需要在安装扩展时完成。

最后,在你的内部script.js file:

if (LAST_SELECTION) {
    // do whatever you want with the information contained in the selection object
}
if (LAST_ELEMENT) {
    // do whatever you want with the element that has been right-clicked
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Google Chrome 扩展更改所选文本的 CSS 的相关文章

随机推荐

  • 工厂创建相同接口的不同对象

    我有1个接口 public interface ISummary int EventId get set 还有许多实现该接口的具体类 public class EmployeeSummary ISummary public int Even
  • 为什么 TRUE == "TRUE" 在 R 中是 TRUE?

    Why TRUE TRUE is TRUE in R 有没有等价的 in R Update 这些都在回归FALSE TRUE True TRUE true TRUE T 唯一的TRUE值为TRUE TRUE 如果检查identical 一切
  • 对于程序的不同运行,全局变量的地址是否相同?

    考虑以下代码片段 int i 10 int main cout lt lt i 一旦为程序生成了 exe 程序不同运行的输出是否相同 假设操作系统支持虚拟内存 编辑 这个问题特定于存储在数据段中的全局变量 由于这是第一个全局变量 因此地址应
  • JS下载多个文件

    我的目标是有一个脚本来下载给定数组内的所有文件 var links http file examples com wp content uploads 2017 10 file example JPG 100kB jpg http file
  • 从 Android Activity 类调用 Javascript 函数

    我正在开发需要使用参数调用 Javascript 函数的应用程序 为了演示 我在这里写了我的 Activity 代码 我想从中调用 js 函数 主要活动 WebView wView FloatingActionButton fab Cont
  • 按键将对象分组为二维数组

    我有一系列对象 这些对象有一个属性称为time 如果这些对象的时间相同 我想将它们分组到同一个数组中 00 00 id 1 time 00 05 id 1 time 00 15 id 1 time 00 20 id 2 time 00 05
  • 批量复制特定文件到子文件夹中

    我有一个 Windows 批处理文件 正在运行该文件以将特定文件移动到子文件夹中 ECHO OFF ECHO Start Copy setlocal enabledelayedexpansion set SOURCE DIR C Users
  • 将数组插入 PHP 文件

    这可能非常愚蠢 但我们还无法做到这一点 我们正在尝试将数组插入到 php 文件中 然而 我们可以将数组插入到 php 文件中 但格式不符合要求 我们有 2 个文件 文件1 php
  • 获取Flask应用程序的根路径

    我正在开发一个 Flask 扩展 我想在文件系统上的项目根路径中创建一个目录 假设我们有这样的目录结构 project app tests my folder manage py my folder 应该由扩展动态创建 它是一个测试实用程序
  • 为什么 findViewById() 在这里不能像 getActivity().findViewById() 一样工作?

    A placeholder fragment containing a simple view public static class PlaceholderFragment extends Fragment public Placehol
  • 如何控制用户输入的地址显示404

    我想在用户输入未知地址时显示 404 页面 如上图所示 之后我可以控制未知地址index php但不知道如何在之前的部分执行此操作index php part 我编写这段代码是为了控制用户输入的内容index php 看起来你的开发机器上有
  • 支持 DOM 样式访问的 Java JSON 库

    我正在用 Java 编写一个 JSON 风格的查询引擎 它将受益于通过 DOM 路径查询 JSON 文档的能力 就像在 Javascript 中所做的那样 我检查过 GSON 和 Jackson 但似乎都不支持这一点 除了我自己的之外 有人
  • Microsoft graph API:无法使用生成的访问令牌获取用户

    我已在 Azure 门户中注册了该应用程序 并生成了 client secret 我需要客户端授权流程 并且我也授予了应用程序权限 我也已授予管理员同意 因为我自己就是管理员 我可以使用给定的 url 生成访问令牌 https login
  • Rails:找不到railties

    rvm v rvm 1 10 2 by Wayne E Seguin lt email protected gt Michal Papis lt email protected gt https rvm beginrescueend com
  • C++的recv()问题

    我想发送一个字符串 Hello there 但我只收到 re 这是为什么 void Accept SOCKADDR IN sock int intsock sizeof sock remoteSocket accept desc LPSOC
  • Vuejs 3如何将变量传递给槽内的所有元素

    我正在使用 VueJs 3 创建一个动态表组件 其中涉及将循环索引变量发送到插槽内的所有子组件 组件的用法如下
  • 无法加载从带有标识符的包中的笔尖引用的图像

    如果需要复制项目 gt 完成 区分大小写 gt 已注意 图像位于项目文件夹内 这里可能有什么问题 Xcode 版本 9 0 我通过将图像导入资产 Assets xcassets 并从那里引用它来解决这个问题 看起来 Xcode 9 中的构建
  • 如何切换浏览器操作的操作?

    我已经创建了我的第一个 chrome 扩展 它将事件处理程序添加到单击时页面上的所有锚元素 如果用户第二次单击该图标 事件处理程序将重新附加到锚元素并执行两次 我需要以下内容 单击浏览器操作 将事件添加到锚元素 如果可能 请在浏览器操作图标
  • 时间:2019-03-17 标签:c#webrequestpostimagetowebapi

    我在将图像上传到我正在运行的 Web API 时遇到问题 使用 GET 请求时 我可以从 Web API 检索数据 但在处理 POST 请求时遇到问题 我需要将 BMP 图像上传到 Web API 然后发回 json 字符串 HttpPos
  • 如何使用 Google Chrome 扩展更改所选文本的 CSS

    我正在为 Chrome 浏览器制作一个扩展 它使用 contextMenus 来更改所选文本的 CSS 但我无法访问 HTML 结构 即所选文本的父节点 就像在本示例中可以轻松做到的那样 var selection window getSe