Chrome扩展的核心:manifest 文件(中)

这篇具有很好参考价值的文章主要介绍了Chrome扩展的核心:manifest 文件(中)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好,我是 dom 哥。我正在写关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星 Chrome扩展的核心:manifest 文件(中)

在上一篇中已经完成了 Chrome 扩展的雏形,本篇接着介绍 manifest 中的可选字段,完善扩展的细节。

manifest 中的可选字段

"content_scripts"

向 web 页面注入 JavaScript 和 CSS。可以说这是 Chrome 扩展的灵魂。当指定 content_scripts 后,每当页面加载时,content_scripts 也将随之加载。

"content_scripts": [
   {
     "css": ["content-style.css"],
     "js": ["content-script.js"],
     "matches": ["<all_urls>"],
     "run_at": "document_idle", // optional
     "world": "ISOLATED" // optional
   }
 ]

content_scripts 里的配置项解释:

  • "css":指定注入的 css 样式文件
  • "js":指定注入的 js 脚本文件

值得注意的是,css 和 js 指定的文件路径必须是相对路径!总是相对于扩展根目录!

  • "matches":用于指定往哪些页面注入 css 和 js,必填项。

    其值并非普通的 url,而是满足如下结构的匹配模式。

    <scheme>://<host>/<path>
    
    • scheme:指明协议格式,只能是以下几种

      • http
      • https
      • 通配符 *, 表示 http 或 https
      • file
    • host:指明主机名。支持通配符 *,但有限制,通配符 * 的屁股后面必须跟 ./!也就是只有以下两种使用方式

      • *.example.com 匹配子域
      • */ 匹配所有域
    • path:指明匹配的网址路径。/* 表示匹配所有路径。

    特殊 case"<all_urls>" 匹配所有页面!一般,额,简单粗暴,就用这个😅!

  • "run_at"脚本注入时机。默认情况下,扩展会在页面处于空闲状态时注入 css 和 js。有以下3个时机可供选择:

    • document_start 页面 html 开始加载前就注入。此时 DOM 树还未建立!
    • document_end window DOMContentLoaded 事件触发后注入。此时 DOM 树已建立,但图片,字体,脚本等资源尚未加载完毕。
    • document_idle 当页面空闲时注入。这也是默认的注入时机!浏览器会在 document_endwindow.onload 触发前这个时间段内选择时机注入,具体注入时机取决于页面的复杂程度。

    下面这张图片可以直观的看出注入时机和页面加载状态的先后时间顺序。🟥 红色字是页面内脚本打印,🟩 绿色字是扩展 content-script 打印。

    Chrome扩展的核心:manifest 文件(中)

  • "world"content-script 的脚本执行环境。默认情况下,content-script 运行在一个隔离的沙箱环境中。这意味着和页面的运行时环境是隔离开来的两个独立环境,最明显的表现就是两个环境里的 全局变量 window 不通。该字段有以下2个选择:

    • ISOLATED 隔离沙箱环境。这也是默认的 content-script 执行环境。
    • MAIN 页面运行时环境。这意味者扩展脚本和页面脚本共享运行时,同一个 window,同一个世界,同一个梦想。

    理解两者的不同非常重要!假设页面上的 js 给 window 对象增加了一个 customVariable 全局变量,

    <head>
      <script>
        window.customVariable = "window.customVariable"
      </script>
    </head>
    

    下面是扩展的 content-script 在 ISOLATEDMAIN 两个不同的环境中打印 window.customVariable 变量的结果:

    Chrome扩展的核心:manifest 文件(中)

    可以发现 ISOLATED 隔离环境访问不到 window.customVariable,值是 undefined,而 MAIN 环境则能访问到!

    我画了一张图,以便直观的展示 ISOLATEDMAIN 执行环境的区别

    Chrome扩展的核心:manifest 文件(中)

"background"

注册一个 service worker 作为后台服务"content_scripts" 是页面级别的脚本,运行于前台页面,随页面销毁。"background" 是浏览器级别的服务,可以长期运行于后台,但事情也并没有那么简单,Chrome 扩展的 service worker 会在需要时自动加载,在闲置时自动休眠。

作为后台服务,service worker 的主要用途是注册事件监听,响应各种事件,比如网络请求,content_scripts 传来的 message 等等。Chrome 扩展提供了大量 chrome.* 接口可供使用,这些接口大多都能在 "background" 中使用,但 "content_scripts" 只能使用其中的少数,这是为安全起见故意设计的。

"background": {
  "service_worker": "service-worker.js",
  "type": "module"
}

不同于 "content_scripts" 可以用数组指定多个,"background" 只支持设置一个。

  • type:指明支不支持 ES Modules,只有 module 一个值,加上就支持 import,不加上就不支持!

配置完 "background" 后在扩展管理里更新扩展,就能看到注册的 Service Worker 啦!

Chrome扩展的核心:manifest 文件(中)

当 service worker 闲置时,它会自动休眠,显示为无效。如下图所示:

Chrome扩展的核心:manifest 文件(中)

"permissions"

明确申明你的扩展需要用到哪些特殊的扩展 APIs,就像手机 App 询问网络权限,位置权限,照片权限等等。权限和 API 绑定,每个权限被授权后都将解锁一批 API。有些权限只需要申明,浏览器就会授予权限,而有些权限还将展示警示弹窗需要用户明确授权才行。

举几个例子:

  • "webRequest",获得访问 chrome.webRequest API,可以监控所有网络流量。
  • "cookies",获得访问 chrome.cookies API,可以操作网站 cookie
  • "bookmarks",获得访问 chrome.bookmarks API,可以读写管理书签
  • "desktopCapture",获得访问 chrome.desktopCapture API,可以进行窗口或页面的截图
  • "downloads",获得访问 chrome.downloads API,可以操作和管理浏览器下载

截至目前,crx-demo 项目的目录结构如下:

crx-demo
├── background
│   ├── service-worker.js
│   └── sub.js
├── content-scripts
│   ├── document_end.css
│   ├── document_end.js
│   ├── document_idle.css
│   ├── document_idle.js
│   ├── document_idle_main.js
│   ├── document_start.css
│   └── document_start.js
├── icon128.png
├── icon48.png
└── manifest.json

已经可以在 content-script 和 background 里任意编写代码来实现自己匪夷所思的奇思妙想啦!

crx-demo 项目已经放在 github 上啦,后续会继续更新丰富细节。

本篇就介绍到这里,下篇接着将把剩余的 manifest 重要选项整理完。

觉得不错可以 点个小星星 Chrome扩展的核心:manifest 文件(中) 支持一下🌹文章来源地址https://www.toymoban.com/news/detail-759956.html

到了这里,关于Chrome扩展的核心:manifest 文件(中)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Chrome 浏览器 Manifest V3 版本中 scripting API 解析

    Chrome 浏览器 Manifest V3 版本中 scripting API 解析 使用  chrome.scripting API 在不同上下文中执行脚本。 可以使用  chrome.scripting API 将 JavaScript 和 CSS 注入网站。 scripting 使用  chrome.scripting API ,需要在 manifest.json 中声明  scripting  权限,以及要向其注入脚本的网页的主机权限。使

    2024年01月19日
    浏览(47)
  • Chrome 插件 V3 版本 Manifest.json 中的内容脚本(Content Scripts)解析

    指定在用户打开某些网页时要使用的 JavaScript 或 CSS 文件。 内容脚本是在网页环境中运行的文件。通过使用标准文档对象模型 ( DOM ),开发者能够读取浏览器所访问网页的详情、更改这些网页,并将信息传递给其父级扩展程序。 内容脚本在声明扩展程序文件为可通过网络访问

    2024年01月19日
    浏览(34)
  • chrome extensions插件declarativeNetRequest修改user-agent方法manifest v3版

    有能力的可以看官方文档:https://developer.chrome.com/docs/extensions/reference/declarativeNetRequest/#manifest 有一个需求,想通过插件的方式,修改请求头里面的user-agent,比如修改为iphone的头: 原本浏览器的请求头是: 通过查询发现,v2版本修改请求头的方式为:但是这种方式已经被废弃

    2024年02月01日
    浏览(92)
  • Chrome 浏览器插件从 Manifest V2 升级到 V3 版本所需要修改的点

    Chrome 浏览器官方已经给出确定的时间来弃用 V2 版本的插件了。 最早从 2024 年 6 月 的 Chrome 127 开始,我们将开始停用 Chrome 的不稳定版本(开发者版、 Canary 版和 Beta 版)中的 Manifest V2 扩展程序。受此变化影响的用户会在浏览器中看到 Manifest V2 扩展程序自动停用,并且无法再

    2024年01月16日
    浏览(44)
  • Chrome扩展开发系列开篇

    大家好,我是 dom 哥。这是我关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星。 研究机构 Statcounter 发布了 2023 年 9 月报告,揭示了有关浏览器的最新统计数据。 浏览器 市场份额 Chromium-based? Chrome 63.56% Yes Safari 19.85% No Edge 5.43% Yes Firefox 2.94% No Opera ... Yes 可以看到基

    2024年02月04日
    浏览(48)
  • Chrome扩展之通信

    js类型 介绍 popup 单击插件图标后的弹窗中的js,由于单击图标打开popup,焦点离开又立即关闭,生命周期一般很短。 content-script 与页面共享DOM,但是不共享JS,可访问部分chrome扩展API。 background 权限最高,几乎可调用所有Chrome扩展API(除了devTools),且可以无限制跨域。生命周

    2024年01月23日
    浏览(33)
  • 从零实现的Chrome扩展

    Chrome 扩展是一种可以在 Chrome 浏览器中添加新功能和修改浏览器行为的软件程序,例如我们常用的 TamperMonkey 、 Proxy SwitchyOmega 、 AdGuard 等等,这些拓展都是可以通过 WebExtensions API 来修改、增强浏览器的能力,用来提供一些浏览器本体没有的功能,从而实现一些有趣的事情。

    2024年02月17日
    浏览(42)
  • Chrome扩展开发实战:快速填充表单

    大家好,我是 dom 哥。我正在写关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星 。 填表单是打工人经常面对的场景,作为一个前端,我经常开发一些PC端的页面,它们主要由表单和表格构成,而输入框又是表单里最常见的表单项。 接下来就试着做一个简单的小扩展

    2024年02月04日
    浏览(44)
  • chrome扩展控制popup页面动态切换

    下面在mv2版本的API下完成 实际上通过控制页面元素实现popup页面切换,是一种伪切换,从视觉上达到了切换效果,实际上还是一个popup.html popup.html示例 判断展示哪一个div的内容 不需要在manifest里单独配置browser_action,通过所在的页面决定使用哪一个popup.html页面 准备两个popu

    2024年02月15日
    浏览(62)
  • chrome 扩展 popup 弹窗的使用

    popup介绍 popup 是点击 browser_action 或者 page_action 图标时打开的一个小窗口网页,焦点离开网页就立即关闭,一般用来做一些临时性的交互。 popup配置 V3版本中(V2版本是在 browser_action 中 ),可以通过配置文件( manifest.json )中 action 里面的 default_popup 字段来指定 popup 页面,也

    2024年02月05日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包