屏幕分辨率|尺寸|颜色深度指纹
一、前端通过window.screen接口获取屏幕分辨率 尺寸 颜色深度,横屏竖屏信息。

二、window.screen c++接口实现:
1、third_party\blink\renderer\core\frame\screen.idl
// https://drafts.csswg.org/cssom-view/#the-screen-interface[Exposed=Window
] interface Screen : EventTarget {[HighEntropy=Direct, Measure] readonly attribute long availWidth;[HighEntropy=Direct, Measure] readonly attribute long availHeight;[HighEntropy=Direct, Measure] readonly attribute long width;[HighEntropy=Direct, Measure] readonly attribute long height;[HighEntropy=Direct, Measure] readonly attribute unsigned long colorDepth;// pixelDepth() is an alias for colorDepth(), no need to instrument it twice.[HighEntropy, Measure] readonly attribute unsigned long pixelDepth;// Non-standard[HighEntropy=Direct, Measure] readonly attribute long availLeft;[HighEntropy=Direct, Measure] readonly attribute long availTop;// Fired when the window’s screen or that screen's attributes change.// https://w3c.github.io/window-placement/[SecureContext, HighEntropy, MeasureAs=WindowScreenChange] attribute EventHandler onchange;// Whether the device’s visual output extends over multiple screens.// https://w3c.github.io/window-placement/[SecureContext, HighEntropy=Direct, MeasureAs=WindowScreenIsExtended] readonly attribute boolean isExtended;
};
2、接口实现c++
third_party\blink\renderer\core\frame\screen.h
third_party\blink\renderer\core\frame\screen.cc
namespace display {
struct ScreenInfo;
}namespace blink {class LocalDOMWindow;class CORE_EXPORT Screen : public EventTarget,public ExecutionContextClient,public Supplementable<Screen> {DEFINE_WRAPPERTYPEINFO();public:Screen(LocalDOMWindow*, int64_t display_id);static bool AreWebExposedScreenPropertiesEqual(const display::ScreenInfo& prev,const display::ScreenInfo& current);int height() const;int width() const;unsigned colorDepth() const;unsigned pixelDepth() const;int availLeft() const;int availTop() const;int availHeight() const;int availWidth() const;void Trace(Visitor*) const override;// EventTarget:const WTF::AtomicString& InterfaceName() const override;ExecutionContext* GetExecutionContext() const override;// Whether the device’s visual output extends over multiple screens.// https://w3c.github.io/window-placement/bool isExtended() const;// Fired when the window’s screen or that screen's attributes change.// https://w3c.github.io/window-placement/DEFINE_ATTRIBUTE_EVENT_LISTENER(change, kChange)// Not web-exposed; for internal usage only.static constexpr int64_t kInvalidDisplayId = -1;int64_t DisplayId() const { return display_id_; }void UpdateDisplayId(int64_t display_id) { display_id_ = display_id; }protected:// Helpers to access screen information.gfx::Rect GetRect(bool available) const;const display::ScreenInfo& GetScreenInfo() const;// The internal id of the underlying display, to support multi-screen devices.int64_t display_id_;
};} // namespace blink
三、总结:
修改屏幕信息指纹只需要在screen.cc文件种修改即可。
相关文章:
屏幕分辨率|尺寸|颜色深度指纹
一、前端通过window.screen接口获取屏幕分辨率 尺寸 颜色深度,横屏竖屏信息。 二、window.screen c接口实现: 1、third_party\blink\renderer\core\frame\screen.idl // https://drafts.csswg.org/cssom-view/#the-screen-interface[ExposedWindow ] …...
docker-elasticsearch-kibana-logstash
一、安装 Elasticsearch 尝试直接拉取 Elasticsearch 镜像: 执行 docker pull docker.elastic.co/elasticsearch/elasticsearch,拉取失败,错误提示为 “Error response from daemon: manifest for docker.elastic.co/elasticsearch/elasticse…...
C#设计模式——抽象工厂模式(重点)
文章目录 项目地址一、抽象工厂模式1.1 特性1.2 使用反射获取特性标记的类1.3 完整代码 项目地址 教程作者:教程地址: 代码仓库地址: 所用到的框架和插件: dbt airflow一、抽象工厂模式 工厂方法模式依然存在一个问题就是&…...
全新AI模型家族登场:完全可复现的开源语言模型OLMo 2
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
用Matlab和SIMULINK实现DPCM仿真和双边带调幅系统仿真
1、使用SIMULINK或Matlab实现DPCM仿真 1.1 DPCM原理 差分脉冲编码调制,简称DPCM,主要用于将模拟信号转换为数字信号,同时减少数据的冗余度以实现数据压缩。在DPCM中,信号的每个抽样值不是独立编码的,而是通过预测前一…...
RabbitMQ的交换机总结
1.direct交换机 2.fanout交换机...
Android so库的编译
在没弄明白so库编译的关系前,直接看网上博主的博文,常常会觉得云里雾里的,为什么一会儿通过Android工程cmake编译,一会儿又通过NDK命令去编译。两者编译的so库有什么区别? android版第三方库编译总体思路: 对于新手小白来说搞明白上面的总体思路图很有必…...
2024年底-Arch linux或转为0BSD许可证!
原文:https://archlinux.org/news/providing-a-license-for-package-sources/ 解读:Arch Linux社区通过RFC 40达成共识,决定将所有软件包源代码更改为0BSD许可证。 0BSD许可证是什么?:这是一个非常自由的开源许可证&a…...
深入解析音视频流媒体SIP协议交互过程
一、引言 在音视频流媒体传输过程中,SIP(Session Initiation Protocol)协议发挥着举足轻重的作用。本文将详细全面地介绍音视频流媒体传输中的SIP协议,包括其基本概念、交互过程、关键信令以及应用场景 二、SIP协议基本概念 1.…...
linux安装mysql8.0.40
一、下载MySQL安装包 1.查看glibc版本 rpm -qa | grep glibc 2.到mysql官网下载安装包 二、解压安装 1.上传压缩包纸/usr/local 目录下,解压: tar -xvf mysql-8.0.40-linux-glibc2.17-x86_64.tar.xz 2.重命名: mv mysql-8.0.40-linux-…...
Java基础之控制语句:开启编程逻辑之门
一、Java控制语句概述 Java 中的控制语句主要分为选择结构、循环结构和跳转语句三大类,它们在程序中起着至关重要的作用,能够决定程序的执行流程。 选择结构用于根据不同的条件执行不同的代码路径,主要包括 if 语句和 switch 语句。if 语句有…...
如何还原 HTTP 请求日志中的 URL 编码参数?详解 %40 到 @
在记录HTTP请求的日志中出现了这样的情况: 2024-11-20 11:12:49 INFO network_request gz_login 96 Body: countryAbbrCN&countryCode86&email1222405567%40qq.com&password12354e50456db124f9f34e2789308733&type1 出现这种情况的原因是&#x…...
usb_cam ros包话题说明,image transport包使用
1. /usb_cam/image_raw 类型: sensor_msgs/Image 内容: 摄像头采集的原始图像数据。 用途: 图像处理和分析,例如使用 OpenCV 处理图像。视频流可达10MB/s 图像流查看,例如用 rqt_image_view 进行显示: 2./usb_cam/image_raw/compressed …...
微前端-MicroApp
微前端即是由一个主应用来集成多个微应用(可以不区分技术栈进行集成) 下面是使用微前端框架之一 MicroApp 对 react微应用 的详细流程 第一步 创建主应用my-mj-app 利用脚手架 npx create-react-app my-mj-app 快速创建 安装 npm install --save rea…...
Unity UGUI 垂直循环复用滚动
一 基础类 在unity里面新建这几个类 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// 垂直方向滚动 /// </summary> public class CustomScroll:MonoBehaviour {public …...
Spring MVC 深度剖析:优势与劣势全面解读
文章目录 Spring MVC 优势1. **松耦合**2. **易于测试**3. **灵活性**4. **强大的配置机制**5. **异常处理**6. **国际化支持**7. **数据验证**8. **安全性**9. **性能优化** Spring MVC 劣势1. **学习曲线**2. **配置复杂性**3. **性能开销**4. **视图技术限制**5. **社区和支…...
力扣hot100-->前缀和/前缀书/LRU缓存
前缀和 1. 560. 和为 K 的子数组 中等 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,1,1], k 2 输出:2示例 2&#…...
Three.js CSS2D/CSS3D渲染器
在Three.js开发过程中,有时需要将 HTML 元素与 Three.js 渲染的 3D 场景相结合,这就需要用到 CSS2DRenderer 和 CSS3DRenderer。本文将详细介绍这两种渲染器的原理及其应用 一、CSS2DRenderer 渲染器 概述 CSS2DRenderer 渲染器用于在 3D 场景中渲染纯…...
mongodb文档字符串批量替换
【mongodb文档字符串批量替换脚本语句】 前言: 1、本方式对于数据量大的情况不适用,执行可能比较慢; 2、数据量大的情况,个人推荐代码层面解决,多线程替换更快: (1)写实体类的方式…...
前端安全和解决方案
提到这个我可能想到的就是不要暴露太多的账号密码信息。一些页面的请求和操作要加上权限。 然后下面就详细的介绍前端可能遇到的安全问题以及解决方法。 首先比较常见的前端的安全性问题就是跨站脚本攻击(XSS)。跨站请求伪造(csrfÿ…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
