chrome extensions mv3与mv2比较 执行eval

news2025/7/3 11:51:47

文章目录

      • 背景
      • 1、mv3版本与mv2版本之间的一些区别
      • 2、解决mv3版本DOM交互 & JS执行问题
        • 2.1、关于引入eval5
        • 2.2、关于在background.js执行script脚本
      • 3、background执行fetch调用URL
      • 参考

背景

老的扩展项目使用的是mv2版本的API,计划升级mv3版本的时候遇到了下面的问题,这些问题对老项目的影响非常大,所以这里特此记录一下。

1、mv3版本与mv2版本之间的一些区别

这里主要说明的就是mv3版本background.js关于DOM的操作和执行任意字符串js的区别。解决DOM交互和任意JS代码的执行就能完成大部分功能了

  1. mv3的background.js禁用了DOM元素交互(document & window等对象不可用)
    在这里插入图片描述
  2. ▶mv3禁止在background.js执行任意字符串的js(new Function & eval不可用)
    在这里插入图片描述
  3. mv3禁止使用XMLHttpRequest请求改为使用fetch请求(本质上也是background.js禁用对象后不支持了)
    在这里插入图片描述在这里插入图片描述

2、解决mv3版本DOM交互 & JS执行问题

因为mv3不仅在background.js禁用了以上功能,也在content禁用了以上功能。所以说现在mv3版本的扩展不再执行未经扩展审核的js以及相关库的不安全脚本。但是,扩展又不能完全的禁用掉js的执行,所以有了下面在content引入eval5来帮助执行一些js代码和完成解析DOM的操作。

为什么要在conten引入而不是直接在background引入?

因为background.js中禁用了document & window等对象,引入之后服务工作进程就会加载失败了。

2.1、关于引入eval5

eval5-marter
打开上面链接访问github,下载并查看关于eval5的使用。并在manifest.json引入eval5的js库
https://github.com/bplok20010/eval5/blob/master/docs/umd/eval5.min.js
在这里插入图片描述

需要说明的一点是,eval5只支持完成ES5语法,不支持ES6语法,比如箭头函数、let、const等。如果想要写ES6语法,需要使用其他库(babel)将ES6转为ES5语法使用,这里不是重点也不做介绍!

2.2、关于在background.js执行script脚本

https://developer.chrome.com/docs/extensions/reference/scripting/
为了避免跨域一般是在background执行一些跨域的请求(如获取一些html文本、请求一些跨域api),但是请求之后通过message反复的进行消息通信进行数据处理无疑是非常麻烦的!所以引用了mv3支持的chrome.scripting API执行一些内容脚本,完成后将内容直接返回,大大降低了通信成本和代码复杂度。
附部分关键代码,脚本执行 & eval5执行

/**
 * background向content-script执行方法脚本
 * @param {*} tabId 在指定的tabId执行脚本
 * @param {*} func 需要执行脚本的方法名
 * @param {*} args 脚本方法的参数
 * @param {*} callback 执行成功,返回结果的回调
 */
function executeScriptFunc(tabId, func, args, callback) {
  chrome.scripting.executeScript({
    target: {tabId: tabId},
    func: func,
    args: args
  }, (resultArr) => {
    if (callback && resultArr && resultArr.length > 0) {
      // 只取主帧的返回结果
      callback(resultArr[0].result)
    }
  })
}
function testEval5() {
   let interpreter = new eval5.Interpreter(window);
  // let result = interpreter.evaluate(
  //     `   var a = 4;
  //         var b = 3;
  //         var sum = a+b;
  //         console.log('a+b=', sum)
  //     `
  // , {console: console, window: window, document: document})
  // ###
  let result = interpreter.evaluate(
      `   var a = 4;
          var b = 3;
          var sum = a+b;
          console.log('a+b=', sum);
          sum;
      `)
  console.log('eval5执行结果:', result) 
}
function testParseHtml(htmlData) {
  let dom = new DOMParser()
  let doc = dom.parseFromString(htmlData, 'text/html')
  console.log('doc:', doc?.title)
  return doc?.title
}
// 执行eval5调用
executeScriptFunc('your tabId', testEval5, [], (execResult) => {
  console.log(execResult)
})

// 解析html调用
fetch('https://www.baidu.com').then(rsp => { 
    return rsp.text()
}).then(html => {
    executeScriptFunc('your tabId', testParseHtml, [html], (execResult) => {
        console.log('执行结果返回:', execResult)
        sendResponse('ok')
    })
})

eval5执行结果
在这里插入图片描述

HTML解析执行结果
在这里插入图片描述

3、background执行fetch调用URL

js fetch使用 & 参数

fetch('https://www.baidu.com').then(rsp => { 
  return rsp.text()
}).then(html => {
  console.log(html)
})

参考

谷歌来了也不好使!谁说Chrome插件v3中不能使用eval?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/115383.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL索引为什么使用B+树,而不用二叉树、红黑树、哈希表、B树?

索引是帮助MySQL高效获取数据的排好序的数据结构。 索引数据结构: 1.二叉树 2.红黑树 3.Hash表 4.B-Tree 1. 二叉查找树(Binary Search Trees) 左节点比父节点要小,右节点比父节点要大。它的高度决定的查找效率。 如果某一列数…

Java面试题-框架篇

框架篇 文章目录框架篇1. Spring refresh 流程2. Spring bean 生命周期3. Spring bean 循环依赖解决 set 循环依赖的原理4. Spring 事务失效5. Spring MVC 执行流程6. Spring 注解7. SpringBoot 自动配置原理8. Spring 中的设计模式1. Spring refresh 流程 要求 掌握 refresh…

【服务器数据恢复】EMC存储raid5多块磁盘掉线的数据恢复案例

服务器数据恢复环境: EMC某型号存储; 8块硬盘组成raid5磁盘阵列。 服务器故障: raid5磁盘阵列中2块硬盘离线,服务器崩溃,上层应用不可用。 服务器数据恢复过程: 1、数据恢复工程师将故障存储设备内的所有硬…

嵌入式开发--PID控制

PID简介 讲解PID的文章书籍很多,本文就不详细讲了,只讲一下我在学习过程中不容易理解的一些问题点,以供大家参考。比如很多书籍对于PID,只讲了计算,但是最后计算出来的值如何应用,则完全不讲,当…

C++:设计一个学生学籍管理系统,设计相关信息,并执行一些计算和文件操作

题目: 设计一个学生学籍管理系统: 学生信息包括:姓名、学号、性别和英语、数学、程序设计、体育成绩。数据录入支持键盘输入和文件导入;同时支持导入输入,如自动列出“姓名、学号、性别”,而成绩部分由键盘…

SFP、SFP+、SFP28、QSFP+和QSFP28之间的区别以及不同场景的使用选型

SFP、SFP+、SFP28、QSFP+和QSFP28之间的区别以及不同场景的使用选型。 SFP、SFP+、SFP28、QSFP+和QSFP28这些光模块类型对专业人员来说并不陌生,这些热拔插模块都可用于连接网络交换机和其他网络设备(如服务器或收发器)进行数据传输。但你了解这些模块的具体区别吗?QSFP28…

Python爬虫爬取某电影排行榜图片实例

今天继续给大家介绍Python 爬虫相关知识,本文主要内容是Python爬虫爬取某电影排行榜图片实例。 一、要求分析 在上文Python爬虫爬取某电影排行实例中,我们已经能够使用Python程序爬取某电影排行榜中的电影名称。今天,我们来尝试以下下载电影…

入职第一天,HR拿了一个橙子进门说:你的学历不是统招本科,不符合公司要求,给你个橘子,走吧!...

今天来讲一件又好笑又好气的事,这是一位网友的亲身经历:入职第一天,入职材料填到一半,HR拿了一个橙子进门,放在桌子上开口说:抱歉,由于之前工作失误,没确认你的第一学历不是统招本科…

RK3568平台开发系列讲解(调试篇)Linux相关日志分析

🚀返回专栏总目录 文章目录 一、dmesg二、动态打印案例沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文我们要介绍Linux内核的日志分析。 一、dmesg printk是在内核中运行的向控制台输出显示的函数,Linux内核首先在内核空间分配一个静态缓冲区,作为显示用的空…

​杭州蓝然创业板IPO终止:应收账款、存货账面高,楼永通为实控人​

近日,杭州蓝然技术股份有限公司(下称“杭州蓝然”)向深圳证券交易所提交了撤回在创业板上市申请文件的申请。同时,其保荐机构也撤回保荐。12月23日,深圳证券交易所做出决定,终止对杭州蓝然在创业板IPO的审核…

学习笔记:Java 并发编程②

若文章内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系博主删除。 视频链接:https://www.bilibili.com/video/av81461839配套资料:https://pan.baidu.com/s/1lSDty6-hzCWTXFYuqThRPw&am…

Matlab 实现磁测数据日变改正

1 算法 算法来自于GEMLink 5.2的帮助文档,这个文档基本解决了算法问题。 GemLink日变改正模块界面 1.1 概述 日变改正模块旨在执行磁力日变数据计算,而不用在仪器上进行日变(仪器是未经过校正的原始数据)。这个模块要求已经保…

[ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛

没啥时间打比赛就大概看了一下做了几题 文章目录[Misc] reindeer game[Misc] 调查问卷[Web] ezphp[Misc] reindeer game ​ 这题最简单的方法就是玩游戏了,然后直接出flag flag{82a2acb6-9803-4936-92db-f1431d90c6d1} [Misc] 调查问卷 flag{the_harder_u_struggl…

故事的开始:RaidAI

目录引言RapidAI/RapidOCRRapidAI/YOLO2COCORapidOcrAndroidOnnxRapidAI/RapidOcrNcnnRapidAI/PaddleOCRModelConverterRapidAI/RapidTTSRapidAI/RapidASRRapidAI/RapidPix2Pix引言 RapidAI是一个将AI模型应用到工程中的开源组织,致力于搭建AI模型从学术界到工程界…

RabbitMQ:消息分发模型

Work queues,也被称为 Task queues,任务模型,当消息处理比较耗时时的时候,可能产生消息的速度会远远大于消息的消费速度,消息会堆积越来越多,无法及时处理,此时就可以使用work模型:让…

圣诞的荒诞小故事并记录互联网协议-五层模型

今天敲代码敲着敲着灵光乍现,突然一个荒诞的故事💡映入脑海。 1.未来和过去: 人高度发达(以下称之为渡) 渡可以打开时空穿越过去(以下称之为旧迹),并且可以进随心所欲的来去自如&a…

【微服务】Nacos的寻址机制

目录 一、 Nacos的寻址机制 1、前提 2、设计 3、内部实现 3.1、单机寻址 3.2、文件寻址 3.3、地址服务器寻址 4、未来可扩展点 4.1、集群节点自动扩缩容 💖 Spring家族及微服务系列文章 一、 Nacos的寻址机制 1、前提 Nacos 支持单机部署以及集群部署&am…

xxl-job基本原理以及底层流程讲解

任务执行策略 任务阻塞策略 整体架构部署 这里主要讲解下每个模块的作用 调度模块:负责管理调度信息,按照调度配置发出调度请求,自身不承担任何业务代码。调度系统于任务解耦,提高了系统可用性和稳定性,同时调度系统性…

MFC工程的文件说明

工程创建 使用VS创建一个MFC的工程,这里不做说明 文件说明 使用VS创建好的MFC工程有如下文件: MFC全称Microsoft Foundation Classes,也就是微软基础类库;是VC的核心,是C与Windows API的结合,很彻底的用C封装了Win…

这个医生说的防疫措施,我挺认可的

上面那个语音是一个朋友发给我的,语音时间比较长,但是里面讲的很多内容我觉得挺不错的,现在疫情反复,我们会听到很多关于疫情的信息,有的人说奥密克戎感染性很强,之前专家说的无症状是骗人的,根…