# web-view
基礎(chǔ)庫 1.6.4 開始支持,低版本需做兼容處理。
小程序插件:不支持
微信 Windows 版:支持
微信 Mac 版:支持
微信 鴻蒙 OS 版:支持
渲染框架支持情況:WebView
# 功能描述
承載網(wǎng)頁的容器。會自動鋪滿整個小程序頁面,個人類型的小程序暫不支持使用。
客戶端 6.7.2 版本開始,navigationStyle: custom 對 web-view 組件無效
# 屬性說明
| 屬性 | 類型 | 默認(rèn)值 | 必填 | 說明 | 最低版本 |
|---|---|---|---|---|---|
| src | string | 否 | webview 指向網(wǎng)頁的鏈接??纱蜷_關(guān)聯(lián)的公眾號的文章,其它網(wǎng)頁需登錄小程序管理后臺配置業(yè)務(wù)域名。 | 1.6.4 | |
| bindmessage | eventhandler | 否 | 網(wǎng)頁向小程序 postMessage 時,會在以下特定時機觸發(fā)并收到消息:小程序后退、組件銷毀、分享、復(fù)制鏈接(2.31.1)。e.detail = { data },data是多次 postMessage 的參數(shù)組成的數(shù)組。 | 1.6.4 | |
| bindload | eventhandler | 否 | 網(wǎng)頁加載成功時候觸發(fā)此事件。e.detail = { src } | 1.6.4 | |
| binderror | eventhandler | 否 | 網(wǎng)頁加載失敗的時候觸發(fā)此事件。e.detail = { url, fullUrl },其中 fullUrl 為加載失敗時的完整 url | 1.6.4 |
# 相關(guān)接口 1
web-view網(wǎng)頁中可使用JSSDK 1.3.2提供的接口返回小程序頁面。 支持的接口有:
| 接口名 | 說明 | 最低版本 |
|---|---|---|
| wx.miniProgram.navigateTo | 參數(shù)與小程序接口一致 | 1.6.4 |
| wx.miniProgram.navigateBack | 參數(shù)與小程序接口一致 | 1.6.4 |
| wx.miniProgram.switchTab | 參數(shù)與小程序接口一致 | 1.6.5 |
| wx.miniProgram.reLaunch | 參數(shù)與小程序接口一致 | 1.6.5 |
| wx.miniProgram.redirectTo | 參數(shù)與小程序接口一致 | 1.6.5 |
| wx.miniProgram.postMessage | 向小程序發(fā)送消息,會在以下特定時機觸發(fā)組件的message事件:小程序后退、組件銷毀、分享、復(fù)制鏈接(2.31.1) | 1.7.1 |
| wx.miniProgram.getEnv | 獲取當(dāng)前環(huán)境 | 1.7.1 |
# 示例代碼
// <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
// javascript
wx.miniProgram.navigateTo({url: '/path/to/page'})
wx.miniProgram.postMessage({ data: 'foo' })
wx.miniProgram.postMessage({ data: {foo: 'bar'} })
wx.miniProgram.getEnv(function(res) { console.log(res.miniprogram) })
# 相關(guān)接口 2
web-view網(wǎng)頁中僅支持以下JSSDK接口:
| 接口模塊 | 接口說明 | 具體接口 | 鴻蒙 OS 支持情況 |
|---|---|---|---|
| 判斷客戶端是否支持js | checkJSApi | ? | |
| 圖像接口 | 拍照或上傳 | chooseImage | ? |
| 預(yù)覽圖片 | previewImage | ? | |
| 上傳圖片 | uploadImage | ? | |
| 下載圖片 | downloadImage | ? | |
| 獲取本地圖片 | getLocalImgData | ? | |
| 音頻接口 | 開始錄音 | startRecord | |
| 停止錄音 | stopRecord | ||
| 監(jiān)聽錄音自動停止 | onVoiceRecordEnd | ||
| 播放語音 | playVoice | ||
| 暫停播放 | pauseVoice | ||
| 停止播放 | stopVoice | ||
| 監(jiān)聽語音播放完畢 | onVoicePlayEnd | ||
| 上傳接口 | uploadVoice | ||
| 下載接口 | downloadVoice | ||
| 智能接口 | 識別音頻 | translateVoice | |
| 設(shè)備信息 | 獲取網(wǎng)絡(luò)狀態(tài) | getNetworkType | ? |
| 地理位置 | 使用內(nèi)置地圖打開地點 | openLocation | ? |
| 獲取地理位置 | getLocation | ? | |
| 搖一搖周邊 | 開啟ibeacon | startSearchBeacons | |
| 關(guān)閉ibeacon | stopSearchBeacons | ||
| 監(jiān)聽ibeacon | onSearchBeacons | ||
| 微信掃一掃 | 調(diào)起微信掃一掃 | scanQRCode | ? |
| 微信卡券 | 拉取使用卡券列表 | chooseCard | |
| 批量添加卡券接口 | addCard | ||
| 查看微信卡包的卡券 | openCard | ||
| 長按識別 | 小程序圓形碼 | 無 | ? |
# 相關(guān)接口 3
用戶分享時可獲取當(dāng)前web-view的URL,即在onShareAppMessage回調(diào)中返回webViewUrl參數(shù)。
# 示例代碼
示例代碼:
Page({
onShareAppMessage(options) {
console.log(options.webViewUrl)
}
})
# 相關(guān)接口 4
在網(wǎng)頁內(nèi)可通過window.__wxjs_environment變量判斷是否在小程序環(huán)境,建議在WeixinJSBridgeReady回調(diào)中使用,也可以使用JSSDK 1.3.2提供的getEnv接口。
# 示例代碼
// web-view下的頁面內(nèi)
function ready() {
console.log(window.__wxjs_environment === 'miniprogram') // true
}
if (!window.WeixinJSBridge || !WeixinJSBridge.invoke) {
document.addEventListener('WeixinJSBridgeReady', ready, false)
} else {
ready()
}
// 或者
wx.miniProgram.getEnv(function(res) {
console.log(res.miniprogram) // true
})
# 相關(guān)接口 5
從微信7.0.0開始,可以通過判斷 userAgent 中包含 miniProgram 字樣來判斷小程序 web-view 環(huán)境。
從微信 Android 8.0.16,iOS 8.0.17 開始,web-view 的 userAgent 中會攜帶小程序的 appid。
對于微信鴻蒙 OS 版本,可根據(jù) userAgent 中包含 ArkWeb 和 MicroMessenger 字樣來判斷。
# 示例代碼
console.log(window.navigator.userAgent);
// "Mozilla/....../arm64 miniProgram/wx14211cb2fd9f805123" 攜帶了 miniProgram 字樣和小程序的 appid
# 相關(guān)接口 6
從微信7.0.3開始,webview內(nèi)可以通過判斷下面的方式判斷小程序是否在前臺:
WeixinJSBridge.on('onPageStateChange', function(res) {
console.log('res is active', res.active)
})
# Bug & Tip
tip:網(wǎng)頁內(nèi) iframe 的域名也需要配置到域名白名單。tip:開發(fā)者工具上,可以在 web-view 組件上通過右鍵 - 調(diào)試,打開 web-view 組件的調(diào)試。tip:每個頁面只能有一個 web-view,web-view 會自動鋪滿整個頁面,并覆蓋其他組件。tip:web-view 網(wǎng)頁與小程序之間不支持除 JSSDK 提供的接口之外的通信。tip:在 iOS 中,若存在JSSDK接口調(diào)用無響應(yīng)的情況,可在 web-view 的 src 后面加個#wechat_redirect解決。tip:避免在鏈接中帶有中文字符,在 iOS 中會有打開白屏的問題,建議加一下 encodeURIComponent