新聞中心
- web-view 網(wǎng)頁容器
- 屬性說明
- 使用 web-view 打開限定域名內(nèi)的網(wǎng)頁
- 示例
- 代碼示例
- 相關(guān)接口介紹
- Web 態(tài)說明
- 相關(guān)接口 1
- 相關(guān)接口 2
- 相關(guān)接口 3
- Bug & Tip
- 常見問題
- Q:如何在 web-view 中使用撥打電話的功能或接口?
- Q:在 web-view 中使用了 cookie ,導(dǎo)致存儲信息與小程序不能共享的原因是什么?
- Q:小程序使用 web-view ,分享時 path 字段指定的鏈接能直接是 web-view 對應(yīng)的 url 而不是小程序的 path 嗎?
- 屬性說明
web-view 網(wǎng)頁容器
解釋:web-view 組件是一個可以用來承載網(wǎng)頁的容器,會自動鋪滿整個智能小程序頁面。navigationStyle: custom 對 web-view 組件無效

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:申請域名、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、秀英網(wǎng)站維護、網(wǎng)站推廣。
屬性說明
| 屬性名 | 類型 | 默認值 | 必填 | 說明 | 最低版本 |
|---|---|---|---|---|---|
| src | String | 是 | web-view 指向網(wǎng)頁的鏈接 | - | |
| bindmessage | EventHandler | 否 | 網(wǎng)頁向小程序 postMessage 時,會在特定時機(小程序后退、組件銷毀、分享)觸發(fā)并收到消息。e.detail = { data } | 1.12.0 低版本請做兼容性處理 |
使用 web-view 打開限定域名內(nèi)的網(wǎng)頁
訪問智能小程序管理中心,進入對應(yīng)的小程序管理后臺,點擊“設(shè)置 -> 開發(fā)設(shè)置 -> 業(yè)務(wù)域名”,即可在業(yè)務(wù)域名中下載、配置校驗文件并配置業(yè)務(wù)域名。
如何在根目錄下放置校驗文件?
舉例:小程序 appid = 123456
-
配置域名為:https://a.baidu.com 則需要把校驗文件放置到 a.baidu.com 域名下,最后的鏈接地址為:https://a.baidu.com/bd\_mapp\_domaincer\_123456.txt
-
配置域名為:https://baidu.com 則需要把校驗文件放置到 baidu.com 域名下,最后的鏈接地址為:https://baidu.com/bd\_mapp\_domaincer\_123456.txt
-
配置域名為:https://xx.bb.baidu.com 則需要把校驗文件放置到 xx.bb.baidu.com 域名下,最后的鏈接地址為:https://xx.bb.baidu.com/bd\_mapp\_domaincer\_123456.txt
正確配置的情況下,這個txt文件應(yīng)該是能夠通過這些地址(如:https://a.baidu.com/bd\_mapp\_domaincer\_123456.txt)訪問到的。配置后,頁面打開的效果:
注意事項:
- 所有在 H5 頁面(包括通過該頁打開的其他 H5 頁)出現(xiàn)的請求域名都需要進行上方的配置,含靜態(tài)文件(js、css、圖片等)
- 當(dāng)在
開發(fā)者工具-項目信息-本地配置里不勾選校驗域名時,可以在開發(fā)環(huán)境中臨時關(guān)閉對域名的校驗,但這個設(shè)置并不對線上小程序生效,即如果小程序發(fā)布上線前,沒有在智能小程序管理中心進行上方的配置,那線上訪問這些頁面時將依然出現(xiàn)異常,提示出錯
示例
在開發(fā)者工具中打開
在開發(fā)者工具中打開
在 WEB IDE 中打開
掃碼體驗
代碼示例
請使用百度APP掃碼
代碼示例
跳轉(zhuǎn)頁面
- SWAN
- JS
Page({// onLoad 時接收 H5 頁傳過來的參數(shù),可寫在承載 web-view 的小程序頁,也可以寫在非 web-view 頁,此處為非 web-view 頁示例onLoad(options) {if (options.key) {swan.showToast({title: `接受到來自H5頁的參數(shù)為:${options.key}`,icon: 'none'});console.log('接受到來自H5頁的參數(shù)為', options); // {key: 'fromWebview'}}},toWebView() {// 進入 H5 頁swan.navigateTo({url: '/index/index'})}});
web-view 頁面
- SWAN
- JS
Page({data: {src: `https://smartprogram.baidu.com/docs/html/web-view/web-view.html?${encodeURIComponent('中文參數(shù)=value')}`},// onLoad 時接收H5頁傳過來的參數(shù),刷新本 H5 頁的時候,也可以接收onLoad(options) {// 這里Key為示例,可更換為其他if (options.key) {swan.showToast({title: `接受到來自H5頁的參數(shù)為:${options.key}`,icon: 'none'});// {key: 'fromWebview'}console.log('接受到來自H5頁的參數(shù)為', options);}// 分享出去的收口機制,相當(dāng)于刷新if (options.path) {swan.showToast({title: `小程序分享回流后打開的H5頁為:${options.path}`,icon: 'none'});this.setData('src', options.path);}},// web-view 通過 swan.webView.postMessage 向小程序發(fā)送消息,小程序通過 bindmessage 事件來監(jiān)聽網(wǎng)頁向小程序發(fā)送的消息,接收時機:小程序后退、組件銷毀、分享時postMessage(options) {swan.showToast({title: '接收到了H5發(fā)送的message,詳細信息請到控制臺查看',icon: 'none'})console.log('H5頁傳過來的參數(shù)為:', options);// options 為// {// currentTarget: {// id: '_5302',// offsetLeft: 0,// offsetTop: 0,// dataset: {}// },// detail: {// data:["foo"]// },// 'target': {// id: '_5302',// offsetLeft: 0,// offsetTop: 0,// dataset: {}// },// timeStamp: 8,// type: "message",// }},onShareAppMessage(options) {// 獲取當(dāng)前的URL, 真機可以,工具暫不能返回此字段 console.log('H5頁的url', options.webViewUrl);return {title: '智能小程序官方示例',content: '世界很復(fù)雜,百度更懂你——小程序簡介或詳細描述',imageUrl: 'https://b.bdstatic.com/miniapp/images/bgt_icon.png',// 此處寫小程序頁面pathpath: `/index/index?path=${options.webViewUrl}`,success(res) {// 分享成功},fail(err) {// 分享失敗}};}});
H5 頁面
- SWAN
web-view 相關(guān)接口1
onLoad接收參數(shù)
小程序接收web-view傳過來的參數(shù)
相關(guān)接口2
相關(guān)接口3
功能1:H5頁面之間跳轉(zhuǎn)有返回按鈕
/* globals swan */// 頁面加載時判斷是否在小程序環(huán)境中const isSmartApp = function () {// 寫法一swan.webView.getEnv(function (res) {console.log(res.smartprogram);alert(`當(dāng)前頁面是否運行在小程序中:${res.smartprogram}`); // true});// 寫法二// const isWebView = /swan\//.test(window.navigator.userAgent) || /^webswan-/.test(window.name);// alert(`當(dāng)前頁面是否運行在小程序中:${isWebView}`); // true};// 跳轉(zhuǎn)回小程序頁面const navToSmart = function () {// swan.webView.switchTab// swan.webView.reLaunch// swan.webView.navigateToswan.webView.redirectTo({url: '/component/to-web-view/to-web-view?key=fromWebview',success() {console.log('to-web-view success');},fail() {console.log('fail');}});swan.webView.postMessage({data: 'foo'});};// H5頁面重新刷新帶參數(shù)const refresh = function () {console.log('refresh');swan.webView.redirectTo({url: '/component/webview/webview?key=refresh',success() {console.log('to-web-view');},fail() {console.log('fail');}});};// H5頁面向小程序發(fā)送消息const postMessageHandler = function () {swan.webView.postMessage({data: {key: 'message'}});};// H5頁面返回上級小程序頁面const backHandler = function () {swan.webView.navigateBack();};document.getElementById('navToSmart').onclick = navToSmart;document.getElementById('isSmartApp').onclick = isSmartApp;document.getElementById('refresh').onclick = refresh;document.getElementById('postMessage').onclick = postMessageHandler;document.getElementById('back').onclick = backHandler;// 調(diào)用撥打電話APIconst makePhoneCallHandler = function () {swan.makePhoneCall({phoneNumber: '(0313)xxxx xxxx',success: res => {console.log('res', res);},fail: err => {alert('撥打失敗,請檢查是否輸入了正確的電話號碼');}});};// 調(diào)用剪貼板APIconst setClipboardDataHandler = function () {swan.setClipboardData({data: 'originData',success: res => {alert('設(shè)置成功,剪貼板內(nèi)容為originData');},fail: err => {alert('設(shè)置失敗');}});};// 調(diào)用網(wǎng)絡(luò)類型APIconst getNetworkTypeHandler = function () {swan.getNetworkType({success: res => {alert(`當(dāng)前網(wǎng)絡(luò)狀態(tài)為${res.networkType}`);console.log('getNetworkTypeHandler', res.networkType);},fail: err => {alert('獲取網(wǎng)絡(luò)類型失敗');}});};// 調(diào)用分享APIconst openShareHandler = function () {swan.openShare({title: '智能小程序示例',content: '世界很復(fù)雜,百度更懂你',path: 'swan-api/open-share/open-share?key=value',imageUrl: 'https://smartprogram.baidu.com/docs/img/logo_new.png',success: res => {alert('分享成功');console.log('openShare success', res);},fail: err => {alert('分享失敗');console.log('openShare fail', err);}});};// 調(diào)用打開另一個小程序APIconst navigateToSmartProgramHandler = function () {swan.navigateToSmartProgram({// 打開目標(biāo)小程序的AppKey,開發(fā)版AppKey可在開發(fā)者工具中預(yù)覽獲取appKey: 'sc9Tq1iKawTnj5GhG6i77vzeIt4Crt5u',success: res => {console.log('navigateToSmartProgram success', res);},fail: err => {alert('打開失敗');console.log('navigateToSmartProgram fail', err);}});};// 調(diào)用打開地圖APIconst openLocationHandler = function () {swan.openLocation({latitude: 40.04,longitude: 116.27,scale: 18,name: '百度科技園',address: '北京市海淀區(qū)西北旺東路10號院',success: res => {alert('打開成功');console.log('openLocation success', res);},fail: err => {alert('打開失敗');console.log('openLocation fail', err);}});};// 調(diào)用獲取地圖位置APIconst getLocationHandler = function () {swan.getLocation({type: 'gcj02',altitude: true,success: res => {alert('打開成功,詳細信息請到控制臺查看');console.log('getLocation success', res);},fail: err => {alert('打開失敗');}});};// 調(diào)用選擇圖片APIconst chooseImageHandler = function () {swan.chooseImage({count: 9,sizeType: ['original'],sourceType: ['camera'],success: res => {console.log('res.tempFilePaths', res.tempFilePaths);},fail: err => {alert('接口調(diào)用失敗');console.log('chooseImage fail', err);}});};// 調(diào)用預(yù)覽圖片APIconst previewImageHandler = function () {swan.previewImage({current: 'https://b.bdstatic.com/miniapp/image/swan-preview-image-2-zip.png', // current需與urls中鏈接一致urls: ['https://b.bdstatic.com/miniapp/image/swan-preview-image-2-zip.png'],success: res => {console.log('previewImage success');},fail: err => {alert('打開失敗');console.log('previewImage fail', err);}});};// 調(diào)用登錄APIconst loginHandler = function () {swan.login({success: res => {alert('已登錄');console.log('login success', res);},fail: err => {alert('登錄失敗');console.log('login fail', err);}});};document.getElementById('makePhoneCall').onclick = makePhoneCallHandler;document.getElementById('setClipboardData').onclick = setClipboardDataHandler;document.getElementById('getNetworkType').onclick = getNetworkTypeHandler;document.getElementById('openShare').onclick = openShareHandler;document.getElementById('navigateToSmartProgram').onclick = navigateToSmartProgramHandler;document.getElementById('openLocation').onclick = openLocationHandler;document.getElementById('getLocation').onclick = getLocationHandler;document.getElementById('chooseImage').onclick = chooseImageHandler;document.getElementById('previewImage').onclick = previewImageHandler;document.getElementById('login').onclick = loginHandler;// 將跳轉(zhuǎn)提升至小程序?qū)用?/code>const toH5Handler = function () {swan.webView.navigateTo({// 帶不同的query展示不同頁面url: '/component/webview/webview?weburl=2'});};document.getElementById('toH5').onclick = toH5Handler;
相關(guān)接口介紹
Web 態(tài)說明
JSSDK 2.0.21 以上版本支持 Web 態(tài)環(huán)境。
相關(guān)接口 1
web-view 網(wǎng)頁中可使用 JSSDK 提供的接口返回智能小程序頁面。 支持的接口有:
舊版本 swan.xxxx,已更新為 swan.webView.xxxx。
| 接口名 | 說明 |
|---|---|
| swan.webView.navigateTo | 參數(shù)與智能小程序接口一致 |
| swan.webView.navigateBack | 參數(shù)與智能小程序接口一致 |
| swan.webView.switchTab | 參數(shù)與智能小程序接口一致 |
| swan.webView.reLaunch | 參數(shù)與智能小程序接口一致 |
| swan.webView.redirectTo | 參數(shù)與智能小程序接口一致 |
| swan.webView.getEnv | 獲取當(dāng)前環(huán)境 |
| swan.webView.postMessage | 向小程序發(fā)送消息 |
代碼示例
- SWAN
- JS
// javascriptswan.webView.navigateTo({url: '/pages/detail/index'});swan.webView.postMessage({data: 'foo'});swan.webView.postMessage({data: {foo: 'bar'} });// 如何判斷 H5 頁面是否在小程序 web-view 打開:// 方法1:swan.webView.getEnv(function(res) {console.log(res.smartprogram);}); // true// isWebView 若為 true,則是在小程序的 web-view 中打開// 方法2:const isWebView = /swan\//.test(window.navigator.userAgent) || /^webswan-/.test(window.name);
相關(guān)接口 2
web-view 網(wǎng)頁中支持的接口有:
| 接口模塊 | 接口說明 | 具體接口 | 備注 |
|---|---|---|---|
| 設(shè)備 | 撥打電話 | swan.makePhoneCall | |
| 設(shè)備 | 設(shè)置剪貼板 | swan.setClipboardData | |
| 設(shè)備 | 獲取網(wǎng)絡(luò)類型 | swan.getNetworkType | |
| 位置 | 使用內(nèi)置地圖查看位置 | swan.openLocation | |
| 位置 | 獲取地理位置 | swan.getLocation | |
| 媒體 | 拍照或上傳 | swan.chooseImage | |
| 媒體 | 預(yù)覽圖片 | swan.previewImage | |
| 用戶接口 | 分享 | swan.openShare | 需傳入當(dāng)前要分享的小程序的 appKey |
| 用戶接口 | 打開小程序 | swan.navigateToSmartProgram | 2.0.18 版本開始,支持使用 envVersion 打開不同版本的小程序 |
| 開放接口 | 登錄 | swan.login |
相關(guān)接口 3
用戶分享時可獲取當(dāng)前 web-view 的 URL,即在 onShareAppMessage 回調(diào)中返回 webViewUrl 參數(shù),參見上方代碼示例。
Bug & Tip
- Tip:網(wǎng)頁內(nèi) iframe 的域名也需要配置到域名白名單。
- Tip:每個頁面只能有一個
web-view,web-view會自動鋪滿整個頁面,并覆蓋其他組件。 - Tip:網(wǎng)頁與智能小程序之間不支持除 JSSDK 提供的接口之外的通信,如果使用了 JSSDK 提供的接口,需要引入
swanjs,參見上方相關(guān)接口 1 - 代碼示例 。 - Tip:避免給
web-view組件設(shè)置的網(wǎng)頁鏈接中帶有中文字符,在 iOS 中會有打開白屏的問題,建議做一下 encodeURIComponent ,參見上方代碼示例。
常見問題
Q:如何在 web-view 中使用撥打電話的功能或接口?
A:如果想在 web-view 使用 JSSDK 提供的接口能力,需要引入 swanjs 包,請參考代碼示例 - H5 頁面。
“2.0.21.js”版本為舉例,開發(fā)時請參考相關(guān)接口 1 - 代碼示例中的最新版本號進行填寫。
生成的 H5 站點地址放入小程序 web-view 的 src 即可。
Q:在 web-view 中使用了 cookie ,導(dǎo)致存儲信息與小程序不能共享的原因是什么?
A:web-view 網(wǎng)頁與小程序之間不支持除 JSSDK 提供的接口之外的通信:
- 小程序中如需設(shè)置 cookie 建議使用 Storage 。
- 如需傳遞小程序參數(shù)到 web-view 組件的 H5 頁面中, 可加在 web-view 的 src 后。
Q:小程序使用 web-view ,分享時 path 字段指定的鏈接能直接是 web-view 對應(yīng)的 url 而不是小程序的 path 嗎?
A:不能,使用 onShareAppMessage 或者 swan.openShare 進行分享時,path只能設(shè)置為小程序頁面的 path ,不能設(shè)置為 H5 頁面的 url ,若想回到對應(yīng)的 H5 頁,參見上方代碼示例 - 跳轉(zhuǎn)頁面。
本文標(biāo)題:創(chuàng)新互聯(lián)百度小程序教程:web-view網(wǎng)頁容器
網(wǎng)站URL:http://m.fisionsoft.com.cn/article/ccsegic.html


咨詢
建站咨詢
