微信小程序是一種全新的連接用戶與服務(wù)的方式常侣,它可以在微信內(nèi)被便捷地獲取和傳播墩蔓,同時具有出色的使用體驗。同時提供一系列工具幫助開發(fā)者快速接入并完成小程序開發(fā)魏滚。關(guān)于如何注冊配置就不多言了评抚,本文主要還是體驗了下web-view
的功能豹缀。
web-view詳解
有了這個組件之后伯复,小程序可以很好的嵌入一些頁面,可以環(huán)境小程序size
告急的問題邢笙,同樣也使開發(fā)更加便捷啸如,畢竟小程序開發(fā)者基本都對前端開發(fā)較為了解。
web-view能力
說再多還是需要去看官方文檔氮惯,web-view文檔,
兼容
首先就需要注意:兼容問題叮雳,版本庫和對應(yīng)版本比例
基礎(chǔ)庫 1.6.4 開始支持,低版本需做兼容處理妇汗,
個人類型與海外類型的小程序暫不支持使用帘不。
目前而言,基本80%
的用戶會升級微信杨箭,所以其實不必擔(dān)心版本問題寞焙,官方截止2017-12-01
提供的數(shù)據(jù)也說明88%
的用戶支持web-view
。
使用
web-view
組件是一個可以用來承載網(wǎng)頁的容器互婿,會自動鋪滿整個小程序頁面捣郊;
屬性:src
是String
類型,是一個網(wǎng)站的url
慈参,默認值是none
呛牲,webview
指向網(wǎng)頁的鏈接。需登錄小程序管理后臺配置域名白名單驮配。
<!-- wxml -->
<!-- 指向微信公眾平臺首頁的web-view -->
<web-view src="https://mp.weixin.qq.com/"></web-view>
可以配合Page
實例的onLoad
方法來獲取url
的具體值娘扩,也就是一個微信小程序頁面中只有一個web-view
,但是這個web-view
的內(nèi)容可以根據(jù)上一個頁面?zhèn)鬟f的參數(shù)來獲取頁面URL
壮锻,后面會講如何實踐畜侦,
官方提供如下接口:
-
web-view
和小程序的通信
1. 由小程序到web-view
,其實本質(zhì)上WEB-VIEW
也是小程序的一個頁面,所以小程序到web-view
是正常的小程序間的通信躯保,通過wx.navigateTo
、wx.redirectTo
澎语,帶上url
參數(shù),query
參數(shù)就像正常url
的參數(shù)一樣跟著后面途事,然后在web-view
的頁面的Page
實例里面通過onLoad
的方法的參數(shù)來獲取url
的值,設(shè)置給web-view
的src
屬性為改值即可擅羞。
2. 由web-view
到小程序尸变,由于在web-view
的跳轉(zhuǎn)通常是在src
對應(yīng)的網(wǎng)頁中的操作來處理的,所以需要結(jié)合jssdk
來處理减俏,不需要wx.config
配置召烂,直接通過script
標簽來引入[https://res.wx.qq.com/open/js/jweixin-1.3.0.js](http://link.zhihu.com/?target=https%3A//res.wx.qq.com/open/js/jweixin-1.3.0.js)
,就可以使用wx.miniProgram.navigateTo
娃承、wx.miniProgram.navigateBack
奏夫、wx.miniProgram.switchTab
怕篷、wx.miniProgram.reLaunch
、wx.miniProgram.redirectTo
接口酗昼,就像小程序之間的跳轉(zhuǎn)一樣廊谓,單是只能在當(dāng)前小程序頁面內(nèi)跳轉(zhuǎn)。
- 支持以下部分JSSDK接口圖像麻削、音頻蒸痹、搖一搖、地理位置等信息呛哟,具體可以查看web-view文檔,不過這些需要通過
wx.config
來授權(quán)叠荠,就和服務(wù)號開發(fā)類似。 - 用戶分享時可獲取當(dāng)前
<web-view/>
的URL
扫责,即在onShareAppMessage
回調(diào)中返回webViewUrl參數(shù)榛鼎。
Page({
onShareAppMessage(options) {
console.log(options.webViewUrl)
}
})
- 在網(wǎng)頁內(nèi)可通過window.__wxjs_environment變量判斷是否在小程序環(huán)境。
// web-view下的頁面內(nèi)
console.log(window.__wxjs_environment === 'miniprogram') // true
web-view實踐
在目前實踐了部分web-view
的功能公给,
//index.js
Page({
data: {
url: 'https://test.com'
},
onLoad: function(options){
options.url ? this.setData({url: options.url}) : wx.navigateBack({delta: 2});
}
});
//index.wxml
<web-view src="{{url}}"></web-view>
在這個web-view
中借帘,指向的就是https://test.com
的內(nèi)容,所以在在https://test.com
中跳轉(zhuǎn)出回到小程序淌铐,需要修改https://test.com
中的JavaScript
,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>test</title>
<link rel="stylesheet" />
</head>
<body>
<div class="app">
<h1>webview-wechat-detail</h1>
<p>
detail
</p>
<button type="button" id="btn">返回小程序</button>
</div>
<script src="https://test.com/jquery.js"></script>
<script src="https://res.wx.qq.com/open/js/jweixin-1.3.0.js"></script>
<script>
/* eslint-disable */
$(function(){
doucument.cookie = 'bb=bbbbbb';
$('#btn').on('click',function(s) {
document.cookie = 'aa=ssssss';
wx.miniProgram.navigateTo({
url:'/pages/index?test=testtest',
success: function(){
console.log('success')
},
fail: function(){
console.log('fail');
},
complete:function(){
console.log('complete');
}
});
});
});
</script>
</body>
</html>
如果需要使用一些其他的的jssdk
的方法肺然,那就需要參照公眾號的開發(fā)配置了。
web-view采坑
由于很多使用中的一些問題
1.打開的域名沒有在小程序管理后臺設(shè)置業(yè)務(wù)域名(注意是業(yè)務(wù)域名腿准,不是服務(wù)器域名)
2.打開的頁面必須為https服務(wù)
3.打開的頁面302過去的地址也必須設(shè)置過業(yè)務(wù)域名
4.web-view空白問題际起,請升級微信客戶端到 6.5.16
5.頁面可以包含iframe,但是iframe的地址必須為業(yè)務(wù)域名
6.web-view不支持支付能力吐葱,web-view的API能力見web-view的文檔說明
7.開發(fā)者自己檢查自己的https服務(wù)是否正常街望,測試方法:普通瀏覽器打開對應(yīng)的地址
8.如果web-view使用了公眾號授權(quán)的服務(wù),開發(fā)者工具提示網(wǎng)頁開發(fā)者的問題弟跑,請見:公眾號開發(fā)
其他的問題注意:
- 每個頁面只能有一個<web-view/>灾前,<web-view/>會自動鋪滿整個頁面,并覆蓋其他組件孟辑,小程序?qū)ebview的監(jiān)控狀態(tài)基本沒有哎甲,只能設(shè)置src設(shè)置url。
- 關(guān)于小程序和web-view的通信饲嗽,<web-view/> → 小程序只能通過JSSDK 1.3.0提供的接口返回小程序頁面炭玫,設(shè)置參數(shù)來傳值,反之貌虾,小程序到webview也是一樣的吞加,只能是src的路徑帶上參數(shù);
- web-view不支持支付能力,是指無法喚起小程序的直接支付窗口,對于h5的那套支付應(yīng)該是支持的衔憨,但是web-view 里邊沒法使用 微信支付的 JSAPI叶圃,也就是可能可以h5的相關(guān)的的支付中心來支付;
- 關(guān)于層級巫财,在webview中可以無限跳轉(zhuǎn)盗似,對于導(dǎo)航條返回和物理鍵返回都會回到上一個頁面直到退出webview,就像
history.back
平项。 - webview中的html的title會自動放到小程序的頭部作為標題赫舒;
- webview中可以正常使用ajax之類的操作。
- 一些可能的問題問題匯總
作者:caoweiju
原文地址:關(guān)于微信小程序webview的使用