chrome插件模拟isTrusted的事件

2024-09-02 20:36

本文主要是介绍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。

在这里插入图片描述

这篇关于chrome插件模拟isTrusted的事件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131002

相关文章

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

maven中的maven-antrun-plugin插件示例详解

《maven中的maven-antrun-plugin插件示例详解》maven-antrun-plugin是Maven生态中一个强大的工具,尤其适合需要复用Ant脚本或实现复杂构建逻辑的场景... 目录1. 核心功能2. 典型使用场景3. 配置示例4. 关键配置项5. 优缺点分析6. 最佳实践7. 常见问题

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

MyBatis分页插件PageHelper深度解析与实践指南

《MyBatis分页插件PageHelper深度解析与实践指南》在数据库操作中,分页查询是最常见的需求之一,传统的分页方式通常有两种内存分页和SQL分页,MyBatis作为优秀的ORM框架,本身并未提... 目录1. 为什么需要分页插件?2. PageHelper简介3. PageHelper集成与配置3.

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

Idea插件MybatisX失效的问题解决

《Idea插件MybatisX失效的问题解决》:本文主要介绍Idea插件MybatisX失效的问题解决,详细的介绍了4种问题的解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录一、重启idea或者卸载重装MyBATis插件(无需多言)二、检查.XML文件与.Java(该文件后缀Idea可能会隐藏

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,