当前位置: 首页 > news >正文

Chrome 浏览器插件 runtime 字段解析

运行时 runtime

  1. 使用 chrome.runtime API 检索 Service Worker,返回有关 manifest.json 的详细信息
  2. 监听和响应应用或扩展程序生命周期中的事件
  3. 还可以使用此 API 将网址的相对路径转换为完整的一个 URL

一、权限

Runtime API 上的大多数方法都不需要任何权限
但是 sendNativeMessage()connectNative() 除外,它们需要 nativeMessaging 权限。

{"permissions": ["nativeMessaging"],
}

二、Runtime API 用法

1. 消息传递

可以使用以下方法和事件与扩展程序中的不同上下文以及其他扩展程序进行通信:

  • connect()
  • onConnect
  • onConnectExternal
  • sendMessage()
  • onMessage
  • onMessageExternal

扩展程序还可以使用 connectNative() 和 sendNativeMessage() 将消息传递给用户设备上的原生应用。

1.1. Content-scripts.js 文件发送和接收消息
(async () => {// 使用 sendMessage 从 Content 发送消息const response = await chrome.runtime.sendMessage({greeting: "hello"});console.log(response);// 使用 onMessage.addListener Content 接收消息chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {console.log(sender.tab ? "from a content script:" + sender.tab.url : "from the extension");if (request.greeting === "hello") sendResponse({farewell: "goodbye"});});// 使用 connect 从 Content 发送和接收消息var port = chrome.runtime.connect({name: "knockknock"});port.postMessage({joke: "Knock knock"});port.onMessage.addListener(function(msg) {if (msg.question === "Who's there?")port.postMessage({answer: "Madame"});else if (msg.question === "Madame who?")port.postMessage({answer: "Madame... Bovary"});});
})();
1.2. service-worker.js 文件发送和接收消息
(async () => {// 使用 sendMessage 从 background/service-worker 发送消息const [tab] = await chrome.tabs.query({active: true, lastFocusedWindow: true});const response = await chrome.tabs.sendMessage(tab.id, {greeting: "hello"});console.log(response);// 使用 onMessage.addListener background/service-worker 接收消息chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {console.log(sender.tab ? "from a content script:" + sender.tab.url : "from the extension");if (request.greeting === "hello") sendResponse({farewell: "goodbye"});});// 使用 onConnect background/service-worker 接收消息和发送chrome.runtime.onConnect.addListener(function(port) {console.assert(port.name === "knockknock");port.onMessage.addListener(function(msg) {if (msg.joke === "Knock knock")port.postMessage({question: "Who's there?"});else if (msg.answer === "Madame")port.postMessage({question: "Madame who?"});else if (msg.answer === "Madame... Bovary")port.postMessage({question: "I don't get it."});});});
})();

2. 访问拓展程序和平台元数据

  • getManifest()
  • getPlatformInfo()

3. 管理拓展程序生命周期

  • onInstalled
  • onStartup
  • openOptionsPage()
  • reload()
  • requestUpdateCheck()
  • setUninstallURL()

4. 实用功能

  • getURL()
  • restart()
  • restartAfterDelay()

三、类型(Types)

1. ContextFilter

  • 用于匹配特定扩展程序上下文的过滤器。
  • 匹配的上下文必须与所有指定的过滤条件匹配;任何未指定的过滤条件均匹配所有可用的上下文。因此,“{}”的过滤器将匹配所有可用上下文。
1.1. 属性
  • contextIds: string[] 可选此上下文的唯一标识符
  • contextTypes:ContextType[] 可选对应的上下文类型。
  • documentIds: string[] 可选与此上下文关联的文档的 UUID
  • documentOrigins: string[] 可选与此上下文关联的文档的来源
  • documentUrls: string[] 可选与此上下文关联的文档的网址
  • frameIds: number[] 可选此上下文的帧 ID
  • incognito: boolean 可选上下文是否与无痕模式个人资料相关联。
  • tabIds: number[] 可选此上下文的标签页 ID
  • windowIds: number[] 可选此上下文的窗口 ID

2. ContextType

2.1. 枚举
  • TAB: 以标签页形式指定上下文类型
  • POPUP: 将上下文类型指定为扩展程序弹出式窗口
  • BACKGROUND: 将上下文类型指定为 Service Worker。
  • OFFSCREEN_DOCUMENT: 将上下文类型指定为屏幕外文档。
  • SIDE_PANEL: 以侧边栏形式指定上下文类型。

3. ExtensionContext

  • 上下文托管扩展程序内容
3.1. 属性
  • contextId: string 此上下文的唯一标识符
  • contextType ContextType 对应的上下文类型
  • documentId : string 可选 与此上下文关联的文档的 UUID
  • documentOrigin: string 可选 与此上下文关联的文档的来源
  • documentUrl: string 可选 与此上下文关联的文档的网址
  • frameId: number 此上下文的帧 ID,如果该上下文未托管在帧中,则为 -1
  • incognito: boolean 上下文是否与无痕模式个人资料相关联
  • tabId: number 此上下文的标签页 ID,如果该上下文未托管在标签页中,则为 -1
  • windowId: number 此上下文的窗口 ID,如果此上下文未托管在窗口中,则为 -1

4. MessageSender

  • 一个对象,其中包含有关发送消息或请求的脚本上下文的信息。
4.1. 属性
  • documentId: string 可选 打开连接的文档的 UUID。
  • documentLifecycle: string 可选 打开连接的文档在端口创建时所处的生命周期
  • frameId: number 可选 打开连接的帧,0 表示顶级帧,正值表示子帧
  • id: string 可选 打开连接的扩展程序或应用的 ID。
  • nativeApplication: string 可选 打开连接的原生应用的名称。
  • origin: string 可选 打开连接的网页或框架的来源
  • tab: Tab 可选 打开连接的 tabs.Tab
  • tlsChannelId: string 可选 打开连接的页面或框架的 TLS 通道 ID(
  • url: string 可选 打开连接的网页或框架的网址

5. OnInstalledReason

  • 分派此事件的原因。
5.1. 枚举
  • install: 将事件原因指定为安装。
  • update: 以扩展程序更新的形式指定事件原因。
  • chrome_update: 将事件原因指定为 Chrome 更新。
  • shared_module_update: 将事件原因指定为共享模块的更新。

6. OnRestartRequiredReason

  • 分派事件的原因
6.1. 枚举
  • app_update: 将事件原因指定为应用更新。
  • os_update: 将事件原因指定为操作系统更新。
  • periodic: 将事件原因指定为应用定期重启。

7. PlatformArch

  • 机器的处理器架构。
7.1. 枚举
  • arm: 将处理器架构指定为 arm。
  • arm64: 将处理器架构指定为 arm64。
  • x86-32: 将处理器架构指定为 x86-32。
  • x86-64: 将处理器架构指定为 x86-64。
  • mips: 以 mips 形式指定处理器架构。
  • mips64: 以 mips64 形式指定处理器架构。

8. PlatformInfo

  • 包含当前平台相关信息的对象。
8.1. 属性
  • arch: PlatformArch 机器的处理器架构。
  • nacl_arch: PlatformNaclArch 原生客户端架构
  • os: PlatformOs 运行 Chrome 的操作系统。

9. PlatformNaclArch

  • 原生客户端架构
9.1. 枚举
  • arm: 将原生客户端架构指定为 arm。
  • x86-32: 将原生客户端架构指定为 x86-32。
  • x86-64: 将原生客户端架构指定为 x86-64。
  • mips: 以 mips 形式指定原生客户端架构。
  • mips64: 以 mips64 形式指定原生客户端架构。

10. PlatformOs

  • 运行 Chrome 的操作系统。
10.1. 枚举
  • mac: 指定 MacOS 操作系统。
  • win: 指定了 Windows 操作系统。
  • android: 用于指定 Android 操作系统。
  • cros: 指定 Chrome 操作系统。
  • linux: 用于指定 Linux 操作系统。
  • openbsd: 指定 OpenBSD 操作系统。
  • fuchsia: 用于指定 Fuchsia 操作系统。

11. Port

  • 允许与其他网页进行双向通信的对象
11.1. 属性
  • name: string 端口的名称,在对 runtime.connect 的调用中指定
  • onDisconnect: Event 在端口与另一端断开连接时触发。
  • onMessage: Event 端口的另一端调用 postMessage 时会触发此事件
  • sender: MessageSender 可选 此属性将仅出现在传递到 onConnect / onConnectExternal / onConnectNative 监听器的端口上。
  • disconnect: void 立即断开该端口的连接
  • postMessage: void 向端口的另一端发送消息。如果端口断开连接,则会抛出错误

12. RequestUpdateCheckStatus

  • 更新检查的结果
12.1. 枚举
  • throttled: 指定状态检查已受到限制。如果您在短时间内反复检查,就可能会发生这种情况
  • no_update: 指定没有可安装的更新。
  • update_available: 指明有要安装的可用更新。

四、属性(Properties)

4.1. id

  • string 扩展程序/应用的 ID。

4.2. lastError

  • Object 如果 API 函数调用失败,则填充错误消息,否则将填充未定义状态
    • message: string 可选 所发生的错误的详细信息

五、方法(Methods)

1. connect()

尝试连接扩展程序/应用(例如后台网页)或其他扩展程序/应用中的监听器

chrome.runtime.connect(extensionId?:string,connectInfo?:object,
)
1.1. 参数
  • extensionId: string 可选 要连接的扩展程序或应用的 ID
  • connectInfo: object 可选
    • includeTlsChannelId: boolean 可选 对于正在监听连接事件的进程,是否将 TLS 通道 ID 传递到 onConnectExternal。
    • name: string 可选 对于正在监听连接事件的进程,此参数将传递到 onConnect。
1.2. 返回
  • Port 可以发送和接收消息的端口

2. connectNative()

连接到主机中的原生应用

chrome.runtime.connectNative(application:string,
)
2.1. 参数
  • application: string 要连接的已注册应用的名称。
2.2. 返回
  • Port 可通过应用发送和接收消息的端口

3. getBackgroundPage()

检索当前扩展程序/应用中运行的后台网页的 JavaScript“window”对象

仅限 Popup 页面使用

chrome.runtime.getBackgroundPage(callback?:function,
)
3.1. 参数
  • callback 可选 callback 参数如下所示:
(backgroundPage?: Window)=>void
  • backgroundPage: Window 可选 背景网页的 JavaScript“window”对象。
3.2. 返回
  • Promise<Window|undefined>

4. getContexts()

提取与此扩展程序相关联的有效上下文的相关信息

chrome.runtime.getContexts(filter:ContextFilter,callback?:function,
)
4.1. 参数
  • filter: ContextFilter 用于查找匹配上下文的过滤条件
  • callback: function 可选: (contexts: ExtensionContext[])=>void
    • contexts: ExtensionContext[] 匹配的上下文
4.2. 返回
  • Promise<ExtensionContext[]>

5. getManifest()

chrome.runtime.getManifest()

从清单中返回有关应用或扩展程序的详细信息,返回的对象是完整清单文件的序列化内容。

5.1 返回
  • object: manifest 详情

6. getPackageDirectoryEntry()

返回软件包目录的 DirectoryEntry。

只能在 popup 页面调用

chrome.runtime.getPackageDirectoryEntry(callback?:function,
)
6.1. 参数
  • callback:function 可选callback 参数如下所示:(directoryEntry:DirectoryEntry)=>void
    • directoryEntry:DirectoryEntry
6.2. 返回
  • Promise

7. getPlatformInfo()

返回有关当前平台的信息。

chrome.runtime.getPlatformInfo(callback?:function,
)
7.1. 参数
  • callback:function 可选 (platformInfo:PlatformInfo)=>void
    • platformInfo: PlatformInfo
7.2. 返回
  • Promise<PlatformInfo>

8. getURL()

根据路径获取对应的网址 URL

chrome.runtime.getURL(path:string)
8.1. 参数
  • path:string 应用/扩展程序中资源的路径,以相对于其安装目录表示。
8.2. 返回
  • string对应的网址 URL

9. openOptionsPage()

打开扩展程序的选项页面

chrome.runtime.openOptionsPage(callback?:function)
9.1. 参数
  • callback: function 可选()=>void
9.2. 返回
  • Promise

10. reload()

chrome.runtime.reload()

重新加载应用或扩展程序。

11. requestUpdateCheck()

对此应用程序/扩展程序进行立即更新检查。

chrome.runtime.requestUpdateCheck(callback?:function)
11.1. 参数
  • callback: function 可选 (result:object)=>void
    • result: object
      • status: RequestUpdateCheckStatus 更新检查的结果。
      • version: string 可选 如果有可用更新,则此字段包含可用更新的版本。
11.2. 返回
  • Promise

12. restart()

chrome.runtime.restart()

当应用在自助服务终端模式下运行时,重启 ChromeOS 设备

13. restartAfterDelay()

当应用在自助服务终端模式下运行时,在特定秒数后重启 ChromeOS 设备

chrome.runtime.restartAfterDelay(seconds:number,callback?:function)
13.1. 参数
  • seconds: number 重新启动设备前的等待时间(以秒为单位),如果选择 -1,则可以取消预定的重新启动。
  • callback: function 可选 ()=>void
13.2. 返回
  • Promise

14. sendMessage()

向扩展程序/应用或其他扩展程序/应用中的事件监听器发送一条消息

chrome.runtime.sendMessage(extensionId?:string,message:any,options?:object,callback?:function,
)
14.1. 参数
  • extensionId: string 可选 要向其发送消息的扩展程序/应用的 ID。如果省略此选项,消息将会发送到您自己的扩展程序/应用。如果您从网页发送消息以实现网络消息,则必须使用此标签。
  • message: any 要发送的消息
  • options: object 可选
    • includeTlsChannelId: boolean 可选 对于正在监听连接事件的进程,是否将 TLS 通道 ID 传递到 onMessageExternal。
  • callback: function 可选 (response:any)=>void
    • response: any 消息的处理程序发送的 JSON 响应对象
14.2. 返回
  • Promise

15. sendNativeMessage()

向原生应用发送单条消息。

chrome.runtime.sendNativeMessage(application:string,message:object,callback?:function,
)
15.1. 参数
  • application: string 原生消息传递主机的名称。
  • message: object 将传递给原生消息传递主机的消息。
  • callback: function 可选 (response:any)=>void
15.2. 返回
  • Promise

16. setUninstallURL()

设置卸载后要访问的网址

chrome.runtime.setUninstallURL(url:string,callback?:function,
)
16.1. 参数
  • url: string 要在卸载扩展程序后打开的网址
  • callback: function(可选)()=>void
16.2. 返回
  • Promise

六、Events

从扩展程序进程或内容脚本,通过 runtime.connect 建立连接时触发。

1. onConnect

chrome.runtime.onConnect.addListener(callback:function,
)
1.1. 参数
  • callback:function: (port:Port)=>void

2. onConnectExternal

从其他扩展程序通过 runtime.connect 建立连接时触发。

chrome.runtime.onConnectExternal.addListener(callback:function,
)
2.1. 参数
  • callback: function: (port:Port)=>void

3. onConnectNative

从原生应用建立连接时触发

chrome.runtime.onConnectNative.addListener(callback:function,
)
3.1. 参数
  • callback: function: (port:Port)=>void

4. onInstalled

首次安装扩展程序、将扩展程序更新到新版本以及 Chrome 更新到新版本时触发

chrome.runtime.onInstalled.addListener(callback:function,
)
4.1. 参数
  • callback: function: (details:object)=>void
    • details:object
      • id: string 可选 表示已更新的导入共享模块扩展程序的 ID
      • previousVersion: string 可选 表示扩展程序的旧版本,只是刚被更新过
      • reason: OnInstalledReason 分派此事件的原因。

5. onMessage

当消息从扩展程序进程通过 runtime.sendMessage 或内容脚本通过 tabs.sendMessage 发送时触发

chrome.runtime.onMessage.addListener(callback:function,
)
5.1. 参数
  • callback: function:
(message: any,sender: MessageSender,sendResponse:function)=>boolean|undefined
  • message: any
  • sender: MessageSender
  • sendResponse:function:()=>void
  • return: boolean|undefined

6. onMessageExternal

从其他扩展程序/应用发送消息时触发通过 runtime.sendMessage。无法在内容脚本中使用。

chrome.runtime.onMessageExternal.addListener(callback:function,
)
6.1. 参数
  • callback: fubction
(message:any,sender:MessageSender,sendResponse:function)=>boolean|undefined
  • message:any
  • sender:MessageSender
  • sendResponse:function:()=>void
  • return: boolean|undefined

7. onRestartRequired

当应用或运行该应用的设备需要重启时触发

chrome.runtime.onRestartRequired.addListener(callback:function,
)
7.1. 参数
  • callback: function: (reason: OnRestartRequiredReason)=>void

8. onStartup

在安装了此扩展程序的配置文件首次启动时触发

chrome.runtime.onStartup.addListener(callback:function,
)
8.1. 参数
  • callback: function:()=>void

9. onSuspend

在取消加载之前被发送到事件页面

chrome.runtime.onSuspend.addListener(callback:function,
)
9.1. 参数
  • callback: function:()=>void

10. onSuspendCanceled

在 onSuspend 之后发送

chrome.runtime.onSuspendCanceled.addListener(callback:function,
)
10.1. 参数
  • callback: function:()=>void

11. onUpdateAvailable

有可用更新,但由于应用当前正在运行而未立即安装时触发

chrome.runtime.onUpdateAvailable.addListener(callback:function,
)
11.1. 参数
  • callback: function:(details:object)=>void

12. onUserScriptConnect

通过此扩展程序中的用户脚本建立连接时触发

chrome.runtime.onUserScriptConnect.addListener(callback:function,
)
12.1. 参数
  • callback: function:(port:Port)=>void

13. onUserScriptMessage

从与同一扩展程序相关联的用户脚本发送消息时触发

chrome.runtime.onUserScriptMessage.addListener(callback:function,
)
13.1. 参数
  • callback功能callback 参数如下所示:
(message: any,sender: MessageSender,sendResponse:function)=>boolean|undefined
  • message: any
  • sender: MessageSender
  • sendResponse:function:()=>void
  • return: boolean|undefined

相关文章:

Chrome 浏览器插件 runtime 字段解析

运行时 runtime 使用 chrome.runtime API 检索 Service Worker&#xff0c;返回有关 manifest.json 的详细信息监听和响应应用或扩展程序生命周期中的事件还可以使用此 API 将网址的相对路径转换为完整的一个 URL 一、权限 Runtime API 上的大多数方法都不需要任何权限 但是…...

七分钟交友匿名聊天室源码

多人在线聊天交友工具&#xff0c;无需注册即可畅所欲言&#xff01;你也可以放心讲述自己的故事&#xff0c;说出自己的秘密&#xff0c;因为谁也不知道对方是谁。 运行说明&#xff1a; 安装依赖项&#xff1a;npm install 启动&#xff1a;node app.js 运行&#xff1a;直接…...

Aleo项目详细介绍-一个兼顾隐私和可编程性的隐私公链

Aleo上线在即&#xff0c;整理一篇项目的详细介绍&#xff0c;喜欢的收藏。有计划做aleo节点的可交流。 一、项目简介 Aleo 最初是在 2016 年构思的&#xff0c;旨在研究可编程零知识。公司由 Howard Wu、Michael Beller、Collin Chin 和 Raymond Chu 于 2019 年正式成立。 …...

qt学习:实战 http请求获取qq的吉凶

目录 利用的api是 聚合数据 的qq号码测吉凶 编程步骤 配置ui界面 添加头文件&#xff0c;定义网络管理者和http响应槽函数 在界面的构造函数里创建管理者对象&#xff0c;关联http响应槽函数 实现按钮点击事件 实现槽函数 效果 利用的api是 聚合数据 的qq号码测吉凶 先…...

【NodeJS JS】动态加载字体的各方式及注意事项;

首先加载字体这个需求基本只存在于非系统字体&#xff0c;系统已有字体不需要加载即可直接使用&#xff1b; 方案1&#xff1a;创建 style 标签&#xff0c;写入 font-face{font-family: xxx;src: url(xxx)} 等相关字体样式&#xff1b;将style标签添加到body里&#xff1b;方…...

每次请求sessionid变化【SpringBoot+Vue】

引言&#xff1a;花了一晚上的时间&#xff0c;终于把问题解决了&#xff0c;一开始后端做完后,用apifox所有接口测试都是可以的,但当前端跑起来后发现接收不到后端的数据。 当我写完前后端&#xff0c;主页面和获取当前页面信息接口后&#xff0c;配置了cros注解 CrossOrigin…...

勤学苦练“prompts“,如沐春风“CodeArts Snap“

前言 CodeArts Snap 上手一段时间了&#xff0c;对编程很有帮助。但是&#xff0c;感觉代码编写的不尽人意。 我因此也感到困惑&#xff0c;想要一份完整的 CodeArts Snap 手册看看。 就在我感觉仿佛"独自彷徨在这条悠长、悠长又寂寥的雨巷"时&#xff0c;我听了大…...

springboot(ssm线上医院挂号系统 在线挂号预约系统Java系统

springboot(ssm线上医院挂号系统 在线挂号预约系统Java系统 开发语言&#xff1a;Java 框架&#xff1a;springboot&#xff08;可改ssm&#xff09; vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&a…...

万界星空科技可视化数据大屏的作用

随着科技的不断发展和进步&#xff0c;当前各种数据化的设备也是如同雨后春笋般冒了出来&#xff0c;并且其可以说是给我们带来了极大的便利的。在这其中&#xff0c;数据大屏就是非常具有代表性的一个例子。 数据大屏的主要作用包括&#xff1a; 数据分析&#xff1a;数据大屏…...

5月22日比特币披萨日,今天你吃披萨了吗?

比特币披萨日 1. Laszlo Hanyecz2. 最贵披萨诞生记3. 梭哈买披萨4. 未完待续 2010年5月22日&#xff0c;美国佛罗里达州的程序员Laszlo Hanyecz&#xff08;拉兹洛哈涅克斯&#xff09;用10000个比特币购买了棒约翰&#xff08;Papa Johns&#xff09;比萨店一个价值25美元的奶…...

内网穿透、远程桌面、VPN的理解

最近在研究内网穿透的相关技术&#xff0c;然后回想起一些相关的技术&#xff0c;比如说要远程桌面公司的电脑&#xff0c;VPN连入内网等。然后想着在此处记录一下&#xff0c;各个的区别&#xff0c;这个纯粹是从技术层面的理解&#xff0c;此处不详细解释怎么去实现或者用什么…...

如何发布自己的npm包,详细流程

发布自己的npm包需要遵循以下具体流程&#xff1a; 创建npm账号&#xff1a;打开浏览器&#xff0c;访问npm官网&#xff0c;注册一个npm账号。 创建项目文件夹并进入&#xff1a;在本地创建一个项目文件夹&#xff0c;并使用终端进入该文件夹。 初始化包信息管理文件&#x…...

【书生·浦语大模型实战】“PDF阅读小助手”学习笔记

1 参考资料 《新版本Lmdeploy量化手册与评测》 2 项目资料 项目主页&#xff1a;【tcexeexe / pdf阅读小助手】 3 模型运行测试 在InternStudio平台中选择A100 (1/4)的配置&#xff0c;镜像选择Cuda11.7-conda&#xff0c;可以选择已有的开发机langchain&#xff1b; 3.1…...

用ChatGPT写申请文书写进常春藤联盟?

一年前&#xff0c;ChatGPT 的发布引发了教育工作者的恐慌。现在&#xff0c;各大学正值大学申请季&#xff0c;担心学生会利用人工智能工具伪造入学论文。但是&#xff0c;聊天机器人创作的论文足以骗过大学招生顾问吗&#xff1f; ChatGPT简介 ChatGPT&#xff0c;全称聊天生…...

uni-app导航栏自定义“返回按钮”多种方法设置原生返回

方法一、 导航栏返回按钮事件 onBackPress监听页面返回,返回 event = {from:backbutton、 navigateBack} ,backbutton 表示来源是左上角返回按钮或 android 返回键;navigateBack表示来源是 uni.navigateBack;详见app、H5、支付宝小程序onBackPress() { this.back1(); …...

【kubernets】kubelet证书单独更新

前言说明 接上一篇文章https://blog.csdn.net/margu_168/article/details/132584109关于kubernets中的证书管理。本篇文章将单独说明一下kubelet的证书更新。在1.19.16版本中&#xff0c;默认情况下使用 kubeadm alpha certs renew all 不能更新kubelet的证书&#xff0c;其他…...

【STM32】STM32学习笔记-硬件SPI读写W25Q64(40)

00. 目录 文章目录 00. 目录01. SPI简介02. W25Q64简介03. SPI相关API3.1 SPI_Init3.2 SPI_Cmd3.3 SPI_I2S_SendData3.4 SPI_I2S_ReceiveData3.5 SPI_I2S_GetFlagStatus3.6 SPI_I2S_ClearFlag3.7 SPI_InitTypeDef 04. 硬件SPI读写W25Q64接线图05. 硬件SPI读写W25Q64示例06. 程序…...

防御保护---安全策略

文章目录 目录 一.安全策略概述 概述&#xff1a; 安全策略的作用&#xff1a; 安全策略与传统防火墙的区别 二.案例分析 练习 一.安全策略概述 概述&#xff1a; 防火墙安全策略的作用在于加强网络系统的安全性&#xff0c;保护网络免受恶意攻击、非法访问和数据泄露的威胁。…...

RustDesk私有化部署,自建远程桌面搭建教程

以linux操作系统为例&#xff1a; 解压安装 # 使用wget进行下载1.1.8-2版本&#xff08;最新版本可以看上述发布地址&#xff09; wget https://github.com/rustdesk/rustdesk-server/releases/download/1.1.8-2/rustdesk-server-linux-amd64.zip # 使用unzip解压 unzip rust…...

Flutter环境搭建【win10虚拟机】+夜神模拟器【主机】

Flutter环境搭建 0 Android Studio 与 VS Code 资源消耗对比1 系统配置要求2 Flutter SDK2.1 获取 Flutter SDK2.2 解压2.3 更新 path 环境变量Dart SDK 要兼容 Flutter SDK双击 flutter_console.bat 输入 flutter doctor 检测环境 3 VS code 与插件3.1 安装 VS code3.2 安装 f…...

【数据结构和算法】种花问题

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 ​​​​​方法一&#xff1a;贪心 2.2 贪心算法一般思路 三、代码 3.1 ​​​​​方法一&#xf…...

Vite+Electron快速构建一个VUE3桌面应用(一)

一. 简介 首先&#xff0c;介绍下vite和Electron。 Vite是一种新型前端构建工具&#xff0c;能够显著提升前端开发体验。Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入Chromium和Node.js到二进制的 Electron 允许您保持一个 JavaScript 代码代码…...

第二百八十九回

文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何混合选择多个图片和视频文件"相关的内容&#xff0c;本章回中将介绍如何通过相机获取视频文件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. …...

Likeshop多商户商城源码系统,支持二开

在电商行业高速发展的当下&#xff0c;拥有一套功能强大、易于操作的开源商城系统至关重要。Likeshop多商户商城系统正是这样一款集H5、小程序、独立APP于一体的开源电商解决方案&#xff0c;助力商家实现智能营销。 一、产品简介 Likeshop多商户商城系统为商家提供了丰富的营…...

Excel:将截面数据转换成面板数据

原始截面数据如下&#xff1a; 步骤&#xff1a;数据——自表格/区域 点击确定&#xff0c;出现下图&#xff1a; 然后&#xff0c;在这个界面选择&#xff1a;“转换”——“逆透视列”下选择逆透视其他列。会出现面板数据形式。 然后&#xff0c;点击“主页”——关闭并上载即…...

209.长度最小的子数组(力扣LeetCode)

文章目录 209.长度最小的子数组题目描述暴力滑动窗口 209.长度最小的子数组 题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其长度…...

Docker容器部署OpenCV,打造高效可移植的计算机视觉开发环境

推荐 海鲸AI-ChatGPT4.0国内站点&#xff1a;https://www.atalk-ai.com 前言 在计算机视觉领域&#xff0c;快速部署和测试算法是研究和开发的关键。OpenCV作为一个强大的开源计算机视觉库&#xff0c;广泛应用于各种图像处理和视频分析任务。然而&#xff0c;配置OpenCV环境可…...

【Linux】Linux系统编程——pwd命令

文章目录 1.命令概述2.命令格式3.常用选项4.相关描述5.参考示例 1.命令概述 pwd&#xff08;Print Working Directory&#xff09;命令用于显示用户当前工作目录的完整路径。这是一个常用的命令&#xff0c;帮助用户确定他们目前所在的目录位置。 2.命令格式 基本的 pwd 命令…...

暴力破解

暴力破解工具使用汇总 1.查看密码加密方式 在线网站&#xff1a;https://cmd5.com/ http://www.158566.com/ https://encode.chahuo.com/kali&#xff1a;hash-identifier2.hydra 用于各种服务的账号密码爆破&#xff1a;FTP/Mysql/SSH/RDP...常用参数 -l name 指定破解登录…...

VirtualBox安装Ubuntu22.04

目录 1、新建虚拟机 1.1、设置内存大小 1.2、创建虚拟硬盘 2、虚拟机设置 2.1、设置启动顺序​编辑 2.2、选择iso镜像文件 2.3、设置网络(桥接网卡) 3、启动 3.1、设置语言环境 3.2、系统更新安装(不更新) 3.3、选择键盘布局(默认即可) 3.4、选择安装类型 3.5、网…...

山东网站开发制作/放心网站推广优化咨询

错误处理 try、except、finally 先执行try中的语句&#xff0c;如果发生了错误则被except捕获&#xff0c;否则无错误则执行else语句&#xff0c;最终执行finally语句 try:print(try...)r 10 / int(2)print(result:, r) except ValueError as e:print(ValueError:, e) exce…...

wordpress禁用react/郑州网站推广优化

一、首先说一下&#xff0c;Hadoop有三种运行模式。 第一个是独立(或本地)运行模式&#xff1a;无需运行任何守护进程&#xff0c;所有程序都在一个同一个JVM上执行。 第二个是伪分布模式&#xff1a;Hadoop守护进程运行在本地机器上&#xff0c;模拟一个小规模的集群。 第三个…...

自学建立网站/花钱推广的网络平台

一、new只是隐藏父类中的同名方法。基类和父类中都存在这个方法。 namespace ConsoleApplication1 {class Program{static void Main(string[] args){BaseClass bcdc new DerivedClass();bcdc.Method2(); //结果&#xff1a;Base - Method2Console.Read();}public class BaseC…...

求网页设计与网站建设/慈溪seo排名

slf4j、log4j、logback的关系 slf4j译为简单日志门面&#xff0c;是日志框架的抽象,实现了日志框架一些通用的api&#xff0c;而log4j和logback是众多日志框架中的几种。 log4j和logback可以单独的使用&#xff0c;也可以绑定slf4j一起使用。 单独使用。分别调用框架自己的方…...

如何找专业的网站建设公司/手机如何制作自己的网站

Java有两种方式让我们在运行时识别对象和类的信息&#xff1a;1、“传统的”RTTI&#xff0c;假定所有的类型编译时已知&#xff1b;2、“反射”机制&#xff0c;允许在运行时发现和使用类的信息。 一、RTTI RTTI&#xff08;Run-Time Type Infomation&#xff09;&#xff0c;…...

临朐县哪里有做网站的/网站优化包括哪些内容

进程间的通信&#xff1a;传递一些变量来相互沟通&#xff1b; #管道 #有名管道 #信号量 #信号 #共享内存 #消息队列 #套接字 # 管道( pipe )&#xff1a;管道是一种半双工的通信方式&#xff0c;数据只能单向流动&#xff0c;而且只能在具有亲缘关系的进程间使用。进程的亲缘关…...