可以有多个内容脚本用于不同的功能吗?

2024-02-17

我对此很陌生,但我正在尝试创建一个 chrome 扩展来操作网页上的 DOM。目前,我有两个按钮,每个按钮都会执行不同的任务。下面这段话有道理吗?另外,如果我有多个内容脚本,如何将它们都添加到manifest.json中

弹出.js:

function injectTheScript() {
        chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        // query the active tab, which will be only one tab
        //and inject the script in it
        chrome.tabs.executeScript(tabs[0].id, {file: "content_script.js"});
    });
}
function injectTheScript1() {
        chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        // query the active tab, which will be only one tab
        //and inject the script in it
        chrome.tabs.executeScript(tabs[0].id, {file: "content_script1.js"});
    });
}

document.getElementById('clickactivity').addEventListener('click', injectTheScript);
document.getElementById('clickactivity1').addEventListener('click', injectTheScript1);

为每个函数注入一个内容脚本的方式没有任何问题。但是,您可以通过不使用来使其变得更简单tabs.query()获取活动选项卡。默认选项卡用于tabs.executeScript() https://developer.chrome.com/extensions/tabs#method-executeScript是当前活动的选项卡(即您从中获取的选项卡)tabs.query()).

为每个功能注入一个脚本还是通过消息来启动所需功能的一个脚本,哪一个更好的选择取决于您的设计和您想要执行的操作。如果它们是相对罕见的函数(特别是由用户操作引发的,就像您的那样),那么为每个函数注入一个脚本通常是更好的选择(这是我在我的扩展之一中所做的事情)。这肯定比将一个很少使用的脚本注入到大量网站上要好,因为该脚本只是在需要时才开始执行某些操作。收到一条消息 https://developer.chrome.com/extensions/messaging来自后台脚本。例如,等待用户与浏览器 UI(而非内容 UI)交互的扩展,然后将消息从后台脚本发送到内容脚本以执行任务。当然在这种情况下,最好等到需要时再注入内容脚本。

显然,如果用户交互要从网页内部开始,而不是从浏览器 UI 开始,则需要将脚本注入到所有相关页面上。当您这样做时,您将需要使用消息传递 https://developer.chrome.com/extensions/messaging如果后台脚本需要执行一些需要后台脚本对扩展 API 具有更广泛访问权限的操作,则在内容脚本和后台脚本之间进行设置。

描述内容脚本注入清单.json

没有更多关于您希望如何将内容脚本添加到您的清单.json(例如方案、域、页面(即 URL)、脚本名称等)我们无法确切地告诉您如何执行此操作,除了阅读文档 https://developer.chrome.com/extensions/content_scripts。我想说的是,使用您的两个脚本注入相同的内容脚本是不寻常的。清单.json and tabs.executeScript()。这样做本身并没有什么错。如果这是正确的做法将取决于代码和站点。

文档中可能不清楚的一件事是content_scriptskey 是一个对象数组。每个对象描述一组注入。对象中的所有文件都被注入到与该对象匹配的页面中该对象中提供的 URL 模式 https://developer.chrome.com/extensions/content_scripts#match-patterns-globs。您可以在其中拥有任意数量的描述注射组的对象。content_scripts array.

以下示例既加载多个内容脚本,又将不同的内容脚本加载到不同的页面上,使用清单.json(改编自鳕鱼Chrome 的内容脚本页面 https://developer.chrome.com/extensions/content_scripts).

进入所有页面匹配https://www.google.com/*,它会注入myGoogleStyles.css, jquery.js, and myGoogleScript.js.
进入所有页面匹配http://www.example.com/*,它会注入myExampleStyles.css, jquery.js, and myExampleScript.js:

"content_scripts": [
    {
      "matches": ["https://www.google.com/*"],
      "css": ["myGoogleStyles.css"],
      "js": ["jquery.js", "myGoogleScript.js"]
    },
    {
      "matches": ["http://www.example.com/*"],
      "css": ["myExampleStyles.css"],
      "js": ["jquery.js", "myExampleScript.js"]
    }
  ],
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可以有多个内容脚本用于不同的功能吗? 的相关文章

随机推荐

  • 为什么非静态字段不能充当GC根?

    据我所知 静态字段 以及线程 局部变量和方法参数 JNI 引用 充当 GC 根 我无法提供可以证实这一点的链接 但我已经阅读了很多相关文章 为什么非静态字段不能充当GC根 首先 我们需要确保我们对于跟踪垃圾收集算法在标记阶段的作用达成共识
  • cmd / DOS 批处理脚本中变量周围的方括号表示法

    我见过 cmd 批处理脚本使用平方符号来包围变量 例如 echo off if 1 echo no parameter entered else echo param1 is 1 这样做的目的是什么 它用于正确的语法 想象一下 您想检查变量
  • 模拟器上未收到 Firebase 消息

    我按照中的说明进行操作https stackoverflow com a 38626398 565212 https stackoverflow com a 38626398 565212将 SNS 到 FCM 连接到 Android 应用
  • 如何使用SLIM框架创建MySQL事务

    我正在使用Slim框架来创建一个RESTful API 如何创建一个事务来执行多个SQL语句和 或能够回滚其中一些语句 SLIM没有附带 MySQL 所以基本上你会用正常的方式 使用 PDO 或 MySQLi 来完成它 所以基本上 假设 P
  • 如何在 PySpark 的 UDF 中返回“元组类型”?

    All the 中的数据类型pyspark sql types are https spark apache org docs latest api python modules pyspark sql types html all Dat
  • 如何将原始字符串文字传递给 [[deprecated(message)]] 属性?

    我想将原始字符串文字传递给 deprecated message 属性作为消息 该消息被反复使用 所以我想避免代码重复 首先 我尝试使用 static constexpr 变量 static constexpr auto str R Use
  • 使用 openssl.exe 使用 256 位 RSA 密钥对 20 字节消息进行签名,但不在代码中

    我有一个 256 位私钥 我想用它来签署 SHA 1 摘要 20 字节 直接使用 openssl 似乎可以工作 回声并不重要 openssl dgst sha1 二进制 openssl rsautl sign inkey 256bit pr
  • 如何从 Cmd 运行 Perl 脚本而不在脚本路径前面键入“perl”?

    例如perl C Projects trunk PcApps BaseCamp Test smoketest pl C Projects trunk PcApps BaseCamp Test log txt 如果没有perl 将 pl 扩展
  • 如何在 jboss7 中配置静态上下文路径?

    我正在尝试找到一种在 jboss 7 中配置静态上下文路径的方法 我们正在从 jboss 4 2 升级 在该版本中 我们在 server xml 中有一个配置元素 如下所示
  • 将 jQuery UI 按钮添加到从 Ajax 加载的 UI 对话框

    我正在打开和关闭使用 ajax 动态创建的对话框 我希望能够让对话框中显示的按钮使用 jQuery UI 按钮 我可以通过调用 button button 来做到这一点 但这会影响每个按钮元素 我怎样才能具体只影响此对话框中出现的按钮 va
  • 用于探索 Windows Vista 音频设备链(树?)的工具

    新的 Vista Audio 子系统被设置为一系列设备 从输入开始 经过所有各种控制 如混音器和音量控制 然后到达各种端点 如扬声器或耳机 我的问题是 是否有一种工具可以显示系统中的所有端点设备以及哪些设备链接在一起 理想情况下 它会绘制拓
  • 重写 Amazon S3 静态 URL [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 为了从 Amazon S3 托管纯静态站点 重写 URL 和终端节点以便通过重写引擎 例如任何 Web 服务器 以更友好的方式访问其资源是唯一的途径吗
  • NVD3时间格式,带焦点图的线

    我正在使用带有焦点图的 nvd3 线的相当简单的示例 myData从我的 php 文件返回一个 JSON 对象 其中 x 坐标是 0 23 之间的数字 我想知道如何将 x 轴格式化为小时格式 d3 json get data php fun
  • Laravel 5.2 auth 更改“用户”表

    我使用了 Laravel 中的新功能 php artisan make auth 但是当我注册时它将使用数据库表users默认情况下 但我想将其更改为其他表 默认情况下它使用updated at and created at在那个表中 我也
  • Java I/O - 模拟 System.console() 的输入

    我正在为练习中创建的程序编写 JUnit 这意味着测试需要覆盖尽可能多的情况 并且我对程序中某些事情的实现方式没有任何影响 此外 该程序运行无限循环 在某一时刻 它要求用户输入一些内容 对于 JUnit 测试 我在另一个中运行该程序Thre
  • Python基础数据参考,相同参考列表

    假设我有两个列表 gt gt gt l1 1 2 3 4 gt gt gt l2 11 12 13 14 我可以将这些列表放入元组或字典中 看起来它们都是对原始列表的引用 gt gt gt t l1 l2 gt gt gt d l1 l1
  • css 无法在 github 页面上工作[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我无法让我的 CSS 显示在网站上 我真的不知道我在这里做错了什么 我对这一切都很陌生 所以我确信有些东西我看不到 这是
  • Django 如何在 DatabaseError: 查询超时后重新连接

    我有一个独立的脚本 它使用 Django ORM 从 Postgresql 读取 写入 我偶尔会收到此错误 数据库错误 查询超时服务器 意外关闭连接 这可能意味着服务器异常终止 在处理请求之前或期间 我需要重新建立连接并重试脚本中的处理代码
  • 我应该为 SSIS 项目签入哪些文件?

    在我的 SSIS 项目文件夹中 除了我创建的三个包 dtsx 文件之外 我还有额外的文件 有一个 ProjectName database 文件 一个 ProjectName dtproj 文件和一个 ProjectName dtproj
  • 可以有多个内容脚本用于不同的功能吗?

    我对此很陌生 但我正在尝试创建一个 chrome 扩展来操作网页上的 DOM 目前 我有两个按钮 每个按钮都会执行不同的任务 下面这段话有道理吗 另外 如果我有多个内容脚本 如何将它们都添加到manifest json中 弹出 js fun