在 uniApp App 开发中,通过 WebView 嵌入 H5 页面是常见需求(如活动页、第三方页面),核心需解决「H5 与 App 通信」「H5 操作后返回/跳转 App」两大问题。本文基于 DCloud 官方方案(原文链接),对每一步骤进行细节补充与问题拆解,确保落地无坑。

一、前置准备:引入 uni.webview.js(核心依赖)

H5 与 App 通信的核心是 uni.webview.js——这是 DCloud 官方提供的桥接脚本,封装了 H5 调用 App 能力的接口(如返回 App、跳转 App 页面、发送消息)。需严格按以下步骤配置,避免“uni.webView 未定义”等问题。

1. 下载 uni.webview.js

  • 官方下载路径:进入 uniApp 官方文档 - WebView 通信,在「H5 端调用 App 方法」章节找到最新版 uni.webview.js 下载链接(建议保存到本地,避免 CDN 不稳定)。
  • 版本注意:需下载与 uniApp 项目版本兼容的脚本(如 uniApp 3.x 对应 uni.webview.js v3+),旧版本可能缺失 switchTab 等关键方法。

2. 放置脚本到 H5 项目

  • 路径要求:将下载的 uni.webview.js 放入 H5 项目的 static 文件夹(静态资源目录,不被 Webpack 打包,确保 H5 能直接访问)。
    示例结构:
    h5-project/
    └── public/└── static/└── uni.webview.js  # 放入此处(若为 Vue 项目,需在 public/static 下)
    
  • 为什么放 static?:若放入 src 目录,可能被 Webpack 打包后路径变化,导致引入失败;static 目录下的文件会被原样复制到打包后的根目录,路径稳定。

3. 在 H5 入口 HTML 引入脚本

在 H5 项目的 index.html 中引入 uni.webview.js,需注意引入顺序(在业务脚本之前,在 main.js 之后):

<!DOCTYPE html>  
<html lang="en">  
<head>  <meta charset="UTF-8" />  <!-- 1. 适配刘海屏(关键:避免 H5 内容被设备刘海遮挡) -->  <script>  // 检测设备是否支持 env(constant) 安全区域适配var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(safe-area-inset-top)') || CSS.supports('top: constant(safe-area-inset-top)'));// 动态设置 viewport,添加 viewport-fit=cover(刘海屏适配必须)document.write(`<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0${coverSupport ? ', viewport-fit=cover' : ''}" />`);  </script>  <title>H5 嵌入 App 示例</title>  
</head>  
<body>  <div id="app"></div>  <!-- 2. 先引入 H5 业务入口脚本(如 main.js) -->  <script type="module" src="/main.js"></script>  <!-- 3. 再引入 uni.webview.js(确保 uni 对象已挂载到 window) -->  <script type="text/javascript" src="./static/uni.webview.js"></script>  <!-- 4. 初始化 webViewJs 全局变量(方便 Vue 组件调用) -->  <script type="text/javascript">  // 验证脚本是否加载成功(调试关键:控制台打印 webViewJs 确认)const webViewJs = window.uni?.webView;  if (!webViewJs) {  console.error('uni.webview.js 加载失败!请检查路径是否正确');  } else {  console.log('uni.webview.js 加载成功', webViewJs);  // 将 webViewJs 挂载到 window 全局,供 Vue 组件访问window.webViewJs = webViewJs;  }  </script>  
</body>  
</html>
关键细节补充:
  • 刘海屏适配脚本:必须保留!否则在 iPhone 刘海屏、Android 挖孔屏设备上,H5 顶部内容会被遮挡。
  • 引入顺序:若 uni.webview.jsmain.js 之前引入,可能因 window.uni 未初始化导致脚本报错;反之则确保桥接脚本能正确挂载到 uni.webView
  • 全局挂载:将 webViewJs 绑定到 window,是因为 Vue 组件中无法直接访问脚本内的变量,全局挂载后可在组件中通过 window.webViewJs 调用。

二、H5 端实现:返回 App、通信、跳转 App 页面

在 Vue 组件中,通过 window.webViewJs 调用官方封装的接口,实现与 App 的交互。以下对每个功能的细节、场景、异常处理进行拆解。

1. 功能 1:H5 点击后返回 App(关闭 WebView 或返回上一页)

核心需求:

H5 操作完成后(如提交表单),返回 App 的上一级页面(如 App 的列表页),或直接关闭 WebView 回到 App 首页。

实现代码:
<template><button type="primary" @click="handleBackToApp">返回 App</button>
</template><script>
export default {methods: {handleBackToApp() {// 1. 先检查 webViewJs 是否存在(避免未加载脚本时报错)const webViewJs = window.webViewJs;if (!webViewJs) {uni.showToast({ title: '未检测到 App 环境', icon: 'none' });return;}try {// 2. 调用 navigateBack() 返回到 App 的上一页// 效果:若 H5 是 App 打开的第一个页面,返回 App 的上一级;若 H5 是 App 跳转的子页面,返回 App 的前一页webViewJs.navigateBack({delta: 1, // 返回的层级(1 表示上一页,默认 1,不可大于 App 的页面栈深度)success: () => {console.log('返回 App 成功');},fail: (err) => {console.error('返回 App 失败', err);// 异常处理:若 navigateBack 失败,尝试直接关闭 WebView(需 App 端配合)this.handleForceCloseWebView();}});} catch (err) {console.error('返回 App 出错', err);}},// 备选方案:强制关闭 WebView(需 App 端监听该指令)handleForceCloseWebView() {// 发送 "closeWebView" 指令给 App,让 App 主动关闭 WebViewwindow.webViewJs.postMessage({data: { action: 'closeWebView', msg: 'H5 请求关闭 WebView' }});}}
};
</script>
关键细节:
  • navigateBack 的限制

    • 依赖 App 的页面栈:若 App 打开 H5 时的页面栈深度为 1(即 App 首页 → 打开 H5),delta:1 会返回 App 首页;若 App 是从列表页 → 详情页 → 打开 H5,delta:1 会返回详情页。
    • 无法直接关闭 WebView:若需 H5 操作后直接关闭 WebView(如 App 弹窗打开 H5),需 App 端配合——H5 发送 closeWebView 消息,App 接收后调用 uni.closeWebView() 关闭。
  • 异常处理
    若用户在浏览器中打开 H5(非 App 环境),webViewJs 不存在,需提示“请在 App 中打开”;若 navigateBack 失败(如 App 页面栈异常),用 postMessage 发送关闭指令作为备选。

2. 功能 2:H5 发送消息给 App(传递数据如表单结果)

核心需求:

H5 完成操作后(如填写表单、选择数据),将数据传递给 App,App 接收后执行后续逻辑(如弹窗提示、保存数据)。

实现代码:
<template><div><input v-model="formData.name" placeholder="请输入姓名" /><button type="primary" @click="handleSendToApp">提交数据给 App</button></div>
</template><script>
export default {data() {return {formData: { name: '', age: 20 } // H5 中的表单数据};},methods: {handleSendToApp() {const webViewJs = window.webViewJs;if (!webViewJs) {uni.showToast({ title: '未检测到 App 环境', icon: 'none' });return;}// 1. 构造消息格式(必须是 { data: { ... } } 结构,App 端按此解析)const message = {data: {action: 'submitForm', // 指令标识(App 端根据 action 区分逻辑)payload: this.formData, // 传递给 App 的具体数据(表单、选择结果等)timestamp: Date.now() // 可选:添加时间戳,避免消息重复处理}};try {// 2. 发送消息给 AppwebViewJs.postMessage(message, (res) => {// 3. 消息发送成功的回调(仅表示发送成功,不代表 App 已处理)console.log('消息发送成功', res);});// 4. 可选:发送后提示用户uni.showToast({ title: '数据已提交给 App', icon: 'success' });} catch (err) {console.error('发送消息失败', err);uni.showToast({ title: '提交失败,请重试', icon: 'none' });}}}
};
</script>
关键细节:
  • 消息格式要求
    必须用 { data: { ... } } 包裹,因为 App 端通过 web-view 组件的 @message 事件接收时,数据会被封装在 e.detail.data 中(见下文 App 端代码),结构不匹配会导致 App 无法解析。

  • action 字段的作用
    H5 可能给 App 发送多种消息(如提交表单、打开弹窗、跳转页面),通过 action 标识消息类型,App 端可根据 action 执行不同逻辑(如 action === 'submitForm' 时保存表单,action === 'openDialog' 时打开弹窗)。

  • 消息传递的异步性
    postMessage 是异步的,调用后仅表示消息已发送,不代表 App 已处理完成。若需等待 App 处理结果(如 App 保存数据后通知 H5),需 App 端处理完成后主动调用 H5 的回调函数(见下文“App 回复 H5”)。

3. 功能 3:H5 跳转 App 内部页面(普通页/ TabBar 页)

核心需求:

H5 点击后跳转到 App 的指定页面(如从 H5 活动页跳转到 App 的商品详情页、首页),需区分「普通页面」和「TabBar 页面」(App 底部导航页)。

实现代码:
<template><div><button type="primary" @click="handleGoToAppPage">跳 App 商品详情页</button><button type="primary" @click="handleGoToAppTabBar">跳 App 首页(TabBar)</button></div>
</template><script>
export default {methods: {// 跳转 App 普通页面(如商品详情页,非 TabBar 页)handleGoToAppPage() {const webViewJs = window.webViewJs;if (!webViewJs) {uni.showToast({ title: '未检测到 App 环境', icon: 'none' });return;}try {webViewJs.navigateTo({// 1. url 必须是 App 中页面的「绝对路径」(从 pages 目录开始,与 App 的 pages.json 一致)url: '/pages/goods/detail?id=123', // 携带参数:?id=123(App 端通过 onLoad 接收)success: () => {console.log('跳转到 App 商品页成功');},fail: (err) => {console.error('跳转失败', err);// 异常处理:若页面不存在,提示用户uni.showToast({ title: 'App 未找到该页面', icon: 'none' });}});} catch (err) {console.error('跳转出错', err);}},// 跳转 App TabBar 页面(如首页、我的页面,底部有导航的页面)handleGoToAppTabBar() {const webViewJs = window.webViewJs;if (!webViewJs) {uni.showToast({ title: '未检测到 App 环境', icon: 'none' });return;}try {// 2. TabBar 页面必须用 switchTab,不能用 navigateTo(否则跳转失败)webViewJs.switchTab({url: '/pages/index/index', // App 首页的路径(必须在 pages.json 的 tabBar.list 中配置)success: () => {console.log('跳转到 App 首页成功');},fail: (err) => {console.error('TabBar 跳转失败', err);// 常见错误:url 不是 TabBar 页面、路径拼写错误、TabBar 未配置该页面uni.showToast({ title: '跳转首页失败,请检查 App 配置', icon: 'none' });}});} catch (err) {console.error('TabBar 跳转出错', err);}}}
};
</script>
关键细节:
  • 跳转方法的选择

    页面类型推荐方法原因
    普通页面(非 TabBar)navigateTo保留 App 页面栈,可返回上一页
    TabBar 页面switchTabTabBar 页面需切换底部导航,navigateTo 无效
    关闭所有页面跳转reLaunch可选:跳转到指定页面并关闭其他所有页面
  • url 路径规则

    • 必须是 App 中 pages.json 注册的「绝对路径」(如 /pages/index/index),不能带域名(如 https://xxx.com/pages/index 错误)。
    • 携带参数:用 ?key=value 拼接(如 /pages/goods/detail?id=123),App 端在目标页面的 onLoad(options) 中通过 options.id 获取参数。
  • App 端配置检查
    跳转前需确保:① 目标页面已在 pages.json 中注册;② TabBar 页面已在 tabBar.list 中配置,否则会触发 fail 回调。

三、App 端实现:接收 H5 消息、处理跳转

App 端通过 web-view 组件加载 H5,并监听 H5 发送的消息、处理跳转指令,需注意路径配置、消息解析、异常处理。

1. App 端 WebView 页面配置(加载 H5 + 接收消息)

核心代码:
<!-- App 端的 WebView 页面(如 pages/webview/webview.vue) -->
<template><!-- 1. web-view 组件:src 为 H5 地址,@message 监听 H5 发送的消息 --><web-view :src="h5Url" @message="handleH5Message" @error="handleWebViewError"  <!-- 监听 WebView 加载错误 -->></web-view>
</template><script>
export default {data() {return {// 2. H5 地址:开发环境用本地服务地址,生产环境用线上地址h5Url: process.env.NODE_ENV === 'development' ? 'http://localhost:5173' // 本地 H5 服务(需确保手机与电脑在同一局域网): 'https://your-domain.com/h5-activity' // 线上 H5 地址};},methods: {// 3. 接收 H5 发送的消息(核心:解析 H5 传递的数据)handleH5Message(e) {try {// e.detail.data 对应 H5 端 postMessage 的 { data: ... } 结构const { action, payload, timestamp } = e.detail.data;console.log('收到 H5 消息', { action, payload, timestamp });// 4. 根据 H5 的 action 执行不同逻辑switch (action) {case 'submitForm':// 处理 H5 提交的表单数据(如保存到 App 本地存储、调用 App 接口)this.handleFormSubmit(payload);break;case 'closeWebView':// 处理 H5 关闭 WebView 的请求this.handleCloseWebView();break;default:console.warn('未知的 action', action);}} catch (err) {console.error('解析 H5 消息失败', err);}},// 处理 H5 提交的表单数据handleFormSubmit(formData) {// 示例:保存数据到 App 本地存储uni.setStorageSync('h5FormData', formData);// 示例:调用 App 接口提交数据uni.request({url: 'https://your-app-api.com/submit-form',method: 'POST',data: formData,success: (res) => {if (res.data.code === 0) {uni.showToast({ title: '表单提交成功' });// 可选:App 回复 H5(告知处理结果)this.replyToH5({ code: 0, msg: '表单已保存' });} else {uni.showToast({ title: '表单提交失败', icon: 'none' });this.replyToH5({ code: -1, msg: '保存失败' });}}});},// 关闭 WebView 页面(返回 App 上一页)handleCloseWebView() {uni.closeWebView(); // 关闭当前 WebView 页面// 若需返回 App 首页,可配合 navigateBack 或 switchTab// uni.switchTab({ url: '/pages/index/index' });},// App 回复 H5(告知处理结果)replyToH5(data) {const webView = this.$refs.webView; // 需给 web-view 加 ref="webView"if (!webView) return;// 调用 H5 全局函数(H5 需提前定义 window.handleAppReply)const replyScript = `if (window.handleAppReply) {window.handleAppReply(${JSON.stringify(data)});}`;// 通过 evalJS 执行 H5 函数,传递回复数据webView.evalJS(replyScript);},// 处理 WebView 加载错误(如 H5 地址不可访问)handleWebViewError(e) {console.error('WebView 加载错误', e);uni.showToast({ title: '页面加载失败,请重试', icon: 'none' });}}
};
</script><style scoped>
/* 确保 WebView 占满屏幕 */
web-view {width: 100vw;height: 100vh;
}
</style>
关键细节:
  • H5 地址配置

    • 开发环境:用本地 H5 服务地址(如 http://localhost:5173),需确保手机与电脑在同一 WiFi 下,否则 WebView 无法加载。
    • 生产环境:用线上 H5 地址(如 https://your-domain.com/h5),需配置 HTTPS(iOS 要求 App 加载的 H5 必须为 HTTPS,Android 可配置允许 HTTP)。
  • @message 事件解析
    H5 发送的 postMessage 数据会被 uniApp 封装在 e.detail.data 中,需解构 actionpayload,避免直接使用 e.detail 导致数据错误。

  • App 回复 H5 的方法
    若需告知 H5 处理结果(如表单是否保存成功),通过 webView.evalJS() 执行 H5 的全局函数(如 window.handleAppReply),H5 需提前定义该函数:

    // H5 端提前定义全局回调函数(在 index.html 或 main.js 中)
    window.handleAppReply = (data) => {console.log('收到 App 回复', data);if (data.code === 0) {uni.showToast({ title: 'App 已保存数据', icon: 'success' });} else {uni.showToast({ title: data.msg, icon: 'none' });}
    };
    
  • WebView 加载错误处理
    若 H5 地址不可访问、网络异常,@error 事件会触发,需提示用户重试,避免用户看到空白页面。

四、常见问题与解决方案(避坑指南)

1. 问题:H5 中 window.webViewJsundefined

  • 原因
    uni.webview.js 路径错误(如放入 src 目录被打包);② 引入顺序错误(在 main.js 之前引入);③ 浏览器打开 H5(非 App 环境,无 uni.webView 挂载)。
  • 解决
    ① 确认 uni.webview.jsstatic 目录,引入路径为 ./static/uni.webview.js;② 调整引入顺序(在 main.js 之后);③ H5 端添加环境判断:
    if (!window.webViewJs) {document.body.innerHTML = '<div style="padding: 20px;">请在 App 中打开该页面</div>';
    }
    

2. 问题:H5 发送消息,App 收不到

  • 原因
    ① H5 消息格式错误(未用 { data: { ... } } 包裹);② App 端 web-view 未绑定 @message 事件;③ H5 用浏览器打开(未嵌入 App,无消息传递通道)。
  • 解决
    ① 严格按 webViewJs.postMessage({ data: { action: 'xxx' } }) 格式发送;② 检查 App 端 web-view 是否绑定 @message="handleH5Message";③ 用 App 自定义基座测试(非浏览器)。

3. 问题:H5 跳转 App 页面失败

  • 原因
    ① 方法错误(TabBar 页用了 navigateTo);② url 路径错误(如少写 /,写成 pages/index/index 而非 /pages/index/index);③ App 端未注册该页面。
  • 解决
    ① TabBar 页用 switchTab,普通页用 navigateTo;② 检查 url 为绝对路径;③ 确认目标页面在 App 的 pages.json 中注册。

五、生产环境注意事项

  1. uni.webview.js 版本更新
    定期从官方文档下载最新版,避免旧版本缺失功能或存在安全漏洞。

  2. H5 打包路径
    H5 打包后,uni.webview.js 需在 dist/static 目录下,确保线上地址能访问到(如 https://your-domain.com/static/uni.webview.js)。

  3. HTTPS 配置
    iOS 要求 App 加载的 H5 必须为 HTTPS,需为线上 H5 配置 SSL 证书;Android 可在 manifest.json 中配置允许 HTTP(不推荐,不安全):

    "app-plus": {"android": {"networkSecurityConfig": {"cleartextTrafficPermitted": true // 允许 HTTP(仅测试用)}}
    }
    
  4. 消息防重复处理
    H5 发送消息时添加 timestampnonce,App 端接收后校验,避免因网络延迟导致重复处理(如重复提交表单)。

总结

通过「引入 uni.webview.js → H5 调用接口 → App 接收处理」的流程,可实现 H5 与 App 的无缝交互。核心在于:

  • 严格遵循官方消息格式与方法选择(如 switchTab 跳 TabBar 页);
  • 每个环节添加异常处理(如 webViewJs 不存在、跳转失败);
  • 开发时用 App 自定义基座测试,避免浏览器环境干扰。

按本文细节配置,可解决 90% 以上的 H5 嵌入 App 通信问题,实现稳定的跨端交互。

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

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

相关文章

技能提升必备:鸿蒙HarmonyOS应用开发者认证

技能提升必备&#xff1a;鸿蒙HarmonyOS应用开发者认证&#xff0c;HarmonyOS 认证是华为为开发者打造的能力衡量体系。随着 HarmonyOS 系统影响力不断扩大&#xff0c;市场对相关开发人才需求激增。该认证分为基础与高级等不同级别&#xff0c;覆盖应用开发、设备开发等方向。…

Chromium 架构中的 ContentClient / ContentBrowserClient 设计原理全解析

一、前言在阅读 Chromium 源码时&#xff0c;很多人会对这样一段调用产生疑惑&#xff1a;bool BrowserMainLoop::AudioServiceOutOfProcess() const { return base::FeatureList::IsEnabled(features::kAudioServiceOutOfProcess) && !GetContentClient()->browser…

window和liunx提权学习笔记

liunx提权 反弹shell升级交互式反弹sehell 反弹的服务器 接受的服务器 连接上之后的shell&#xff0c;没有tab键补全&#xff0c;不可以上下键显示历史命令 你会发现并不能如愿所偿&#xff0c;「上下方向键」被强制转换为了 ^[[A、^[[B 等字符。 正是由于「简单 shell」的各种…

毕业项目推荐:47-基于yolov8/yolov5/yolo11的焊缝质量检测识别系统(Python+卷积神经网络)

文章目录 项目介绍大全&#xff08;可点击查看&#xff0c;不定时更新中&#xff09;概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式…

Java实现图像像素化

使用Java实现图像像素化艺术效果&#xff1a;从方案到实践的完整指南引言&#xff1a;像素艺术的复兴与编程实现 在当今高清、视网膜屏幕的时代&#xff0c;像素艺术&#xff08;Pixel Art&#xff09;作为一种复古的数字艺术形式&#xff0c;反而焕发出了新的生命力。从独立游…

SpringBoot 自研运行时 SQL 调用树,3 分钟定位慢 SQL!

在复杂的业务系统中&#xff0c;一个接口往往会执行多条SQL&#xff0c;如何直观地看到这些SQL的调用关系和执行情况&#xff1f; 本文将使用SpringBoot MyBatis拦截器构建一个SQL调用树可视化系统。 项目背景 在日常开发中&#xff0c;我们经常遇到这样的场景&#xff1a; …

部署 Go 项目的 N 种方法

Go 语言&#xff08;Golang&#xff09;以其简单、高效和易于部署的特点&#xff0c;成为了很多企业开发和部署服务的首选语言。无论是微服务架构&#xff0c;还是命令行工具&#xff0c;Go 的编译方式和标准库使得部署变得更加轻松。本文将介绍部署 Go 语言项目的几种常见方法…

【ARM】MDK工程切换高版本的编译器后出现error: A1167E\A1159E\A1137E\A1517E\A1150E报错

1、 文档目标解决工程从Compiler 5切换到Compiler 6进行编译时出现一些非语法问题上的报错。2、 问题场景对于一些使用Compiler 5进行编译的工程&#xff0c;要切换到Compiler 6进行编译的时候&#xff0c;原本无任何报错警告信息的工程在使用Compiler 6进行编译后出现了一些非…

AtCoder Beginner Contest 421

文章目录A MisdeliveryB Fibonacci ReversedC AlternatedD RLE MovingE YachtF Erase between X and YG Increase to make it IncreasingAtCoder Beginner Contest 421A Misdelivery Mansion AtCoder has N rooms numbered from room 1 to room N. Each room i is inhabited b…

数据结构:冒泡排序 (Bubble Sort)

目录 从最简单的操作开始 如何利用这个原子操作实现一个具体的小目标&#xff1f; 我们来手动模拟一下&#xff1a; 如何从一个小目标扩展到最终目标&#xff1f; 代码的逐步完善 第一阶段&#xff1a;定义函数框架和我们需要的“原子操作” 第二阶段&#xff1a;实现“…

教育项目管理工具新趋势:可视化与自动化如何提升效率?

课程项目不同于普通商业项目&#xff0c;它涉及 “教研设计→内容开发→师资准备→市场推广→学员服务” 全链路&#xff0c;环节多、角色杂、周期跨度大。传统的 Excel 表格、口头沟通不仅难以追踪进度&#xff0c;更易造成信息断层。而看板工具凭借 “可视化流程、轻量化协作…

计算两个二值图像的交集计算交点数量的基础上,进一步使用 DBSCAN 算法对交点进行聚

好的&#xff0c;如果你需要在计算交点数量的基础上&#xff0c;进一步使用 DBSCAN 算法对交点进行聚类&#xff0c;以合并距离较近的点&#xff0c;可以按照以下步骤实现&#xff1a; 计算交点&#xff1a;使用 cv2.bitwise_and 计算两个二值图像的交集&#xff0c;并提取交点…

Linux中的IP命令详解

华子目录 1.ip命令是什么1.1ip命令的由来1.2ip命令的安装包1.2ip选项&#xff08;基本不用&#xff09; 2.查看网络信息2.1显示全部网络接口信息2.2显示单个网络接口信息2.3显示单个接口状态2.4查看路由表2.5查看arp缓存 3.设置网卡ip地址3.1启用或停用网卡3.2设置默认网关3.3新…

如何解决pip安装报错ModuleNotFoundError: No module named ‘tox’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘tox’问题 摘要 在使用 PyCharm 2025 控制台执行 pip install 命令时&#xff0c;开发者经常会遇到如下错误&#xff1a; ModuleNotFoundError: No module nam…

拆分TypeScript项目的学习收获:处理编译缓存和包缓存,引用本地项目,使用相对路径

最近需要将工作中的一个TS包拆出一部分代码&#xff0c;以便在多个团队和项目中共享。原以为这会是一项特别简单的工作&#xff0c;但是也花了两天才大致拆成功。因此记录一下&#xff0c;也给有类似需求的同学一点经验。 所拆项目的大致功能&#xff1a;整个项目的结构大致分为…

瑞芯微RK3576平台FFmpeg硬件编解码移植及性能测试实战攻略

本文介绍瑞芯微RK3576平台&#xff0c;FFmpeg硬件编解码移植及性能测试方法。 FFmpeg简介与实测数据 FFmpeg简介 FFmpeg是一套多媒体框架&#xff0c;能够解码、编码、转码、复用、解复用、流、过滤和播放数字音频、视频&#xff0c;提供了录制、转换以及流化音视频的完整解…

【网络安全入门基础教程】网络安全零基础学习方向及需要掌握的技能

最近总有同学问我&#xff0c;0基础怎么学网络安全&#xff1f;0基础可以转行做网络安全吗&#xff1f;网络安全有哪些学习方向&#xff1f;每个方向需要掌握哪些技能&#xff1f;今天给大家简单写一下。 我的回答是先了解&#xff0c;再入行。 具体怎么做呢&#xff1f; 首…

Altium Designer中的Net-Tie:解决多网络合并与电气隔离的利器

Altium Designer中的Net-Tie:解决多网络合并与电气隔离的利器 在复杂的PCB设计中,我们常常会遇到一些特殊的电气连接需求。例如,需要将两个或多个逻辑上独立但物理上需要连接的网络(如不同电源域的GND)在特定点进行连接(单点连接),同时又要保持其网络标识的独立性。 …

计算机毕设项目 基于Python与机器学习的B站视频热度分析与预测系统 基于随机森林算法的B站视频内容热度预测系统

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Spark、hadoop、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题…

百胜软件×OceanBase深度合作,赋能品牌零售数字化实践降本增效

8月28日&#xff0c;由OceanBase主办的“2025零售数据底座创新大会”在上海举行。大会重磅发布了由爱分析、OceanBase携手王歆、沈刚两位行业专家联合编制的《零售一体化云数据库白皮书》。白皮书系统梳理了从“大促流量应对”到“AI应用落地”的全流程方法论&#xff0c;并为不…