chrome插件模拟isTrusted的事件

文章目录

  • 方法
  • 原理

使用js模拟的事件isTrusted的值时false。有的时候我们想要模拟sTrusted未true的事件就比较麻烦了。
我们可以利用chrome插件的 chrome.debugger解决改问题。

方法

大体思路是:模拟事件的请求从content_script.js发出,到达background.js进行模拟。

  • manifest中声明debugger的权限
    manifest.json:
{"manifest_version": 3,"name": "test","description": "test","version": "0.0.1","background": {"service_worker": "background.js"},"action": {"default_popup": "./dist/index.html"},"content_scripts": [{"js": ["content_script.js"],"run_at": "document_start"}],"permissions": ["debugger",]
}
  • content_script.js发出请求
// 该函数的作用是:通过触发element身上的mousedown事件来触发element的点击事件
function openDebuggerToClick(element) {return new Promise((resolve, reject) => {console.log('click目标是', element)const x = element.getBoundingClientRect().left + 5const y = element.getBoundingClientRect().top + 5// 根据按钮的mousedown事件来触发点击事件element.addEventListener('mousedown',function (e) {if (!e.isTrusted) {e.preventDefault()let obj = { x, y }chrome.runtime.sendMessage({action: 'mousedownToClick',params: obj},function (response) {console.log('响应结果是', response)if (response.code === 200) {resolve('click success')} else {reject('click fail')}})}},true)// 触发clickelement.dispatchEvent(new MouseEvent('mousedown', {bubbles: true,cancelable: true}))})
}
  • background.js处理请求,模拟isTrusted未true的点击
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {if (request.action === 'mousedownToClick') {const { params } = requestimpMousedownToClick(params, sender, sendResponse)}return true
})
//  ----------------------mouseDown模拟点击跳过限制----------------
const impMousedownToClick = (params, sender, sendResponse) => {chrome.debugger.attach({ tabId: sender.tab.id }, '1.2', function () {console.log('接收到content的消息---------', params, sender)let flag = true// sendResponse({ yourEvent: '正在调整, 需要时间生效' })const xC = params.xconst yC = params.y//通过触发鼠标的按下和抬起事件来触发点击事件chrome.debugger.sendCommand({ tabId: sender.tab.id },'Input.dispatchMouseEvent',{ type: 'mousePressed', x: xC, y: yC, button: 'left', clickCount: 1 },function () {if (chrome.runtime.lastError) {console.error(chrome.runtime.lastError.message)flag = falsereturn}})chrome.debugger.sendCommand({ tabId: sender.tab.id },'Input.dispatchMouseEvent',{type: 'mouseReleased',x: xC,y: yC,button: 'left',clickCount: 1},function () {console.log('鼠标弹起完成_ 处理返回逻辑')if (chrome.runtime.lastError) {console.error(chrome.runtime.lastError.message)flag = falsereturn}setTimeout(() => {if (flag) {sendResponse({ code: 200, message: '点击成功' })} else {sendResponse({ code: 500, message: '点击失败' })}chrome.debugger.detach({ tabId: sender.tab.id }, () => {console.log('取消attach')})}, 5000)})})
}

原理

什么是isTrusted属性?在web api官方网站mozilla.org有如下解释:“Event接口的 isTrusted 属性是一个只读属性,它是一个布尔值(Boolean)。当事件是由用户行为生成的时候,这个属性的值为 true ,而当事件是由脚本创建、修改、通过 EventTarget.dispatchEvent() 派发的时候,这个属性的值为 false 。”

所以如果我们使用Chrome DevTools Protocol协议的Input.dispatchMouseEvent接口,触发的事件isTrusted就为true。

在这里插入图片描述

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

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

相关文章

【类模板】类模板的特化

一、类模板的泛化 与函数模板一样&#xff0c;类模板的泛化就是普通的模板&#xff0c;不具有特殊性的模板。 以下的类模板为泛化的版本 //类模板的泛化 template<typename T,typename U> struct TC {//静态成员变量static int static_varible; //声明TC() {std::cout…

常见图像图片属性的介绍与说明

图像属性是指图像的一些基本特征和参数&#xff0c;它们定义了图像的外观和存储方式。以下是一些常见的图像属性&#xff1a; 1. 分辨率&#xff1a; 分辨率通常以像素数&#xff08;如800x600&#xff09;来表示&#xff0c;指的是图像的宽度和高度上的像素点数。分辨率越高&…

【Spring Boot-IDEA创建spring boot项目方法】

1. 使用Spring Initializr 的 Web页面创建项目 2. 使用 IDEA 直接创建项目&#xff0c;其中有两种不同的搭建路径 3. 使用 IDEA 创建Maven项目并改造为springBoot 最常使用的两种方法其实就是一种&#xff0c;这里介绍在ieda中如何搭建 SpringBoot项目。 1.new Project--> 2…

剑侠情缘c#版(游戏源码+资源+工具+程序),百度云盘下载,大小1.68G

剑侠情缘c#版&#xff08;游戏源码资源工具程序&#xff09;&#xff0c;c#开发的&#xff0c;喜欢研究游戏的可以下载看看。亲测可进游戏。 剑侠情缘c#版&#xff08;游戏源码资源工具程序&#xff09;下载地址&#xff1a; 通过网盘分享的文件&#xff1a;【游戏】剑侠情缘c#…

误删文件回收站也清空了怎么找回?误删文件的救援方案

在数字化时代&#xff0c;电脑中的文件安全至关重要。然而&#xff0c;有时我们可能因为一时疏忽&#xff0c;误删了重要文件&#xff0c;甚至在慌乱中清空了回收站。面对这种情况&#xff0c;很多人会感到惊慌失措&#xff0c;担心重要数据就此丢失。但请不要绝望&#xff0c;…

系统架构设计师——系统性能

性能指标 计算机性能指标 操作系统性能指标 网络的性能指标 数据库的性能指标 数据库管理系统的性能指标 应用系统的性能指标 Web服务器的性能指标 性能计算 定义法 计算方法主要包括定义法、公式法、程序检测法和仪器检测法。这些方法分别通过直接获取理想数据、应用衍生出的…

SAP 查询中间表

可以看到如下代码中&#xff0c;查询了底表zdbconn&#xff0c;又查了中间表ZTFI0072 DATA: gv_dbs(20) ,go_exc_ref TYPE REF TO cx_sy_native_sql_error,gv_error_text TYPE string,lv_count TYPE syst_index.SELECT SINGLE conntxtFROM zdbconn INTO gv_dbsWHERE sy…

数字芯片中I/O单元及电源domain布局中SIPI的考虑

芯片设计的物理实施过程通常也简称为布局布线&#xff08;P&R&#xff0c;Place-and-Route&#xff09;&#xff0c;布局一般被分为布局规划&#xff08;Floorplan&#xff09;和标准单元摆放&#xff08;Place&#xff09;两个过程。而其中的布局规划是芯片后端物理实现过…

Cubase操作:就地渲染 配和弦技巧 合并多段音频 隐藏标记轨序号 删除素材池多余音频

“授人以鱼&#xff0c;不如授之以渔&#xff0c;授人以鱼只救一时之急&#xff0c;授人以渔则可解一生之需。” ​有时侯做音乐最重要的就是不要太死板和要多思考&#xff01;如果被教的只有一部分&#xff0c;只学一部分&#xff0c;有时是很难理解的&#xff0c;一些人可能只…

2 Python开发工具:PyCharm的安装和使用

本文是 Python 系列教程第 2 篇&#xff0c;完整系列请查看 Python 专栏。 1 安装 官网下载地址https://www.jetbrains.com.cn/pycharm/&#xff0c;文件比较大&#xff08;约861MB&#xff09;请耐心等待 双击exe安装 安装成功后会有一个30天的试用期。。。本来想放鸡火教程&…

C练手题--Exclusive “or“ (xor) Logical Operator 【8 kyu】

一、原题 链接&#xff1a;Training on Exclusive "or" (xor) Logical Operator | Codewars Exclusive "or" (xor) Logical Operator Overview In some scripting languages like PHP, there exists a logical operator (e.g. &&, ||, and, or, e…

Android源码编译_内置apk

在开发过程中&#xff0c;有一部分apk&#xff0c;我们是需要出厂内置好的&#xff0c;例如输入法、客户定制app等&#xff0c;这里内置分两种&#xff0c;一种是只内置apk&#xff0c;不含apk源码&#xff0c;一种是包含apk源码。 一、如何将apk内置到系统 1、首先将apk放到…

中国各城市金融科技公司数目数据集(2009-2023年)

金融科技&#xff08;FinTech&#xff09;是金融与科技深度融合的产物&#xff0c;它利用大数据、云计算、人工智能、区块链等现代信息技术手段&#xff0c;对传统金融产品、业务、流程及服务模式进行革新&#xff0c;从而实现金融服务效率的提升、风险管理的优化以及客户体验的…

C语言 | Leetcode C语言题解之第389题找不同

题目&#xff1a; 题解&#xff1a; char findTheDifference(char* s, char* t) {int n strlen(s), m strlen(t);int ret 0;for (int i 0; i < n; i) {ret ^ s[i];}for (int i 0; i < m; i) {ret ^ t[i];}return ret; }

天气数据爬取

目录 历史气象数据获取浏览器访问模拟 历史气象数据获取 主要的python包 requests BeautifulSoup re pandas lxml 浏览器访问模拟 根据浏览器Request-Header参数&#xff0c;让request模拟浏览器行为 import requests from bs4 import BeautifulSoup import re import pandas…

PyTorch中,动态调整学习率(Learning Rate Scheduling),也可以根据损失函数的损失数值自动调整学习率

在PyTorch中&#xff0c;动态调整学习率&#xff08;Learning Rate Scheduling&#xff09;是一种常用的技术&#xff0c; 用于在训练过程中根据一定的策略调整学习率&#xff0c;以优化模型的训练效果和收敛速度。以下是一些常见的学习率调整策略&#xff1a; 1. **固定步长…

HTML沙漏爱心

目录 写在前面 完整代码 下载代码 代码分析 系列文章 写在最后 写在前面 教你用HTML语言实现炫酷的沙漏爱心,该代码不仅可以用电脑运行,手机、平板也可以直接运行哦。 完整代码 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><…

06:【江科大stm32】:定时器输入捕获功能

定时器输入捕获功能 1、通过定时器的输入捕获功能测量PWM波的频率2、PWMI模式测量频率和占空比 1、通过定时器的输入捕获功能测量PWM波的频率 定时器标准库相关的编程接口&#xff1a; ①PWM.c文件的代码如下&#xff1a; /*通过定时器TIM2生成一个分辨率为10us,频率为1KHz的…

【Java设计模式】Bridge模式:在Java中解耦抽象与实现

文章目录 【Java设计模式】Bridge模式&#xff1a;在Java中解耦抽象与实现一、概述二、Bridge设计模式的别名三、Bridge设计模式的意图四、Bridge模式的详细解释及实际示例五、Java中Bridge模式的编程示例六、Bridge模式类图七、Java中何时使用Bridge模式八、Java中Bridge模式的…

如何成为一个飞控算法工程师?

兄弟&#xff0c;这个问题问得好&#xff0c;但也别想着靠看几本书就能一步登天。飞控算法这玩意儿&#xff0c;真要干好了&#xff0c;不是简简单单几个公式几个库就能搞定的。你本科电子专业有点基础&#xff0c;玩过四轴飞行器也算是入门了&#xff0c;但要搞真算法&#xf…