uniApp App 嵌入 H5 全流程:通信與跳轉細節拆解

在 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;并為不…