解释:web-view 组件是一个可以用来承载网页的容器,会自动铺满整个智能小程序页面。navigationStyle: custom 对 web-view 组件无效

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:申请域名、虚拟空间、营销软件、网站建设、秀英网站维护、网站推广。
| 属性名 | 类型 | 默认值 | 必填 | 说明 | 最低版本 |
|---|---|---|---|---|---|
| src | String | 是 | web-view 指向网页的链接 | - | |
| bindmessage | EventHandler | 否 | 网页向小程序 postMessage 时,会在特定时机(小程序后退、组件销毁、分享)触发并收到消息。e.detail = { data } | 1.12.0 低版本请做兼容性处理 |
访问智能小程序管理中心,进入对应的小程序管理后台,点击“设置 -> 开发设置 -> 业务域名”,即可在业务域名中下载、配置校验文件并配置业务域名。
如何在根目录下放置校验文件?
举例:小程序 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文件应该是能够通过这些地址(如:https://a.baidu.com/bd\_mapp\_domaincer\_123456.txt)访问到的。配置后,页面打开的效果:
注意事项:
开发者工具-项目信息-本地配置里不勾选校验域名时,可以在开发环境中临时关闭对域名的校验,但这个设置并不对线上小程序生效,即如果小程序发布上线前,没有在智能小程序管理中心进行上方的配置,那线上访问这些页面时将依然出现异常,提示出错在开发者工具中打开
在开发者工具中打开
在 WEB IDE 中打开
扫码体验
代码示例
请使用百度APP扫码
跳转页面
Page({// onLoad 时接收 H5 页传过来的参数,可写在承载 web-view 的小程序页,也可以写在非 web-view 页,此处为非 web-view 页示例onLoad(options) {if (options.key) {swan.showToast({title: `接受到来自H5页的参数为:${options.key}`,icon: 'none'});console.log('接受到来自H5页的参数为', options); // {key: 'fromWebview'}}},toWebView() {// 进入 H5 页swan.navigateTo({url: '/index/index'})}});
web-view 页面
Page({data: {src: `https://smartprogram.baidu.com/docs/html/web-view/web-view.html?${encodeURIComponent('中文参数=value')}`},// onLoad 时接收H5页传过来的参数,刷新本 H5 页的时候,也可以接收onLoad(options) {// 这里Key为示例,可更换为其他if (options.key) {swan.showToast({title: `接受到来自H5页的参数为:${options.key}`,icon: 'none'});// {key: 'fromWebview'}console.log('接受到来自H5页的参数为', options);}// 分享出去的收口机制,相当于刷新if (options.path) {swan.showToast({title: `小程序分享回流后打开的H5页为:${options.path}`,icon: 'none'});this.setData('src', options.path);}},// web-view 通过 swan.webView.postMessage 向小程序发送消息,小程序通过 bindmessage 事件来监听网页向小程序发送的消息,接收时机:小程序后退、组件销毁、分享时postMessage(options) {swan.showToast({title: '接收到了H5发送的message,详细信息请到控制台查看',icon: 'none'})console.log('H5页传过来的参数为:', 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) {// 获取当前的URL, 真机可以,工具暂不能返回此字段 console.log('H5页的url', options.webViewUrl);return {title: '智能小程序官方示例',content: '世界很复杂,百度更懂你——小程序简介或详细描述',imageUrl: 'https://b.bdstatic.com/miniapp/images/bgt_icon.png',// 此处写小程序页面pathpath: `/index/index?path=${options.webViewUrl}`,success(res) {// 分享成功},fail(err) {// 分享失败}};}});
H5 页面
web-view 相关接口1
onLoad接收参数
小程序接收web-view传过来的参数
相关接口2
相关接口3
功能1:H5页面之间跳转有返回按钮
/* globals swan */// 页面加载时判断是否在小程序环境中const isSmartApp = function () {// 写法一swan.webView.getEnv(function (res) {console.log(res.smartprogram);alert(`当前页面是否运行在小程序中:${res.smartprogram}`); // true});// 写法二// const isWebView = /swan\//.test(window.navigator.userAgent) || /^webswan-/.test(window.name);// alert(`当前页面是否运行在小程序中:${isWebView}`); // true};// 跳转回小程序页面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页面重新刷新带参数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页面向小程序发送消息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;// 调用拨打电话APIconst makePhoneCallHandler = function () {swan.makePhoneCall({phoneNumber: '(0313)xxxx xxxx',success: res => {console.log('res', res);},fail: err => {alert('拨打失败,请检查是否输入了正确的电话号码');}});};// 调用剪贴板APIconst setClipboardDataHandler = function () {swan.setClipboardData({data: 'originData',success: res => {alert('设置成功,剪贴板内容为originData');},fail: err => {alert('设置失败');}});};// 调用网络类型APIconst getNetworkTypeHandler = function () {swan.getNetworkType({success: res => {alert(`当前网络状态为${res.networkType}`);console.log('getNetworkTypeHandler', res.networkType);},fail: err => {alert('获取网络类型失败');}});};// 调用分享APIconst openShareHandler = function () {swan.openShare({title: '智能小程序示例',content: '世界很复杂,百度更懂你',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);}});};// 调用打开另一个小程序APIconst navigateToSmartProgramHandler = function () {swan.navigateToSmartProgram({// 打开目标小程序的AppKey,开发版AppKey可在开发者工具中预览获取appKey: 'sc9Tq1iKawTnj5GhG6i77vzeIt4Crt5u',success: res => {console.log('navigateToSmartProgram success', res);},fail: err => {alert('打开失败');console.log('navigateToSmartProgram fail', err);}});};// 调用打开地图APIconst openLocationHandler = function () {swan.openLocation({latitude: 40.04,longitude: 116.27,scale: 18,name: '百度科技园',address: '北京市海淀区西北旺东路10号院',success: res => {alert('打开成功');console.log('openLocation success', res);},fail: err => {alert('打开失败');console.log('openLocation fail', err);}});};// 调用获取地图位置APIconst getLocationHandler = function () {swan.getLocation({type: 'gcj02',altitude: true,success: res => {alert('打开成功,详细信息请到控制台查看');console.log('getLocation success', res);},fail: err => {alert('打开失败');}});};// 调用选择图片APIconst chooseImageHandler = function () {swan.chooseImage({count: 9,sizeType: ['original'],sourceType: ['camera'],success: res => {console.log('res.tempFilePaths', res.tempFilePaths);},fail: err => {alert('接口调用失败');console.log('chooseImage fail', err);}});};// 调用预览图片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);}});};// 调用登录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;// 将跳转提升至小程序层面const toH5Handler = function () {swan.webView.navigateTo({// 带不同的query展示不同页面url: '/component/webview/webview?weburl=2'});};document.getElementById('toH5').onclick = toH5Handler;
JSSDK 2.0.21 以上版本支持 Web 态环境。
web-view 网页中可使用 JSSDK 提供的接口返回智能小程序页面。 支持的接口有:
旧版本 swan.xxxx,已更新为 swan.webView.xxxx。
| 接口名 | 说明 |
|---|---|
| swan.webView.navigateTo | 参数与智能小程序接口一致 |
| swan.webView.navigateBack | 参数与智能小程序接口一致 |
| swan.webView.switchTab | 参数与智能小程序接口一致 |
| swan.webView.reLaunch | 参数与智能小程序接口一致 |
| swan.webView.redirectTo | 参数与智能小程序接口一致 |
| swan.webView.getEnv | 获取当前环境 |
| swan.webView.postMessage | 向小程序发送消息 |
代码示例
// 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);
web-view 网页中支持的接口有:
| 接口模块 | 接口说明 | 具体接口 | 备注 |
|---|---|---|---|
| 设备 | 拨打电话 | swan.makePhoneCall | |
| 设备 | 设置剪贴板 | swan.setClipboardData | |
| 设备 | 获取网络类型 | swan.getNetworkType | |
| 位置 | 使用内置地图查看位置 | swan.openLocation | |
| 位置 | 获取地理位置 | swan.getLocation | |
| 媒体 | 拍照或上传 | swan.chooseImage | |
| 媒体 | 预览图片 | swan.previewImage | |
| 用户接口 | 分享 | swan.openShare | 需传入当前要分享的小程序的 appKey |
| 用户接口 | 打开小程序 | swan.navigateToSmartProgram | 2.0.18 版本开始,支持使用 envVersion 打开不同版本的小程序 |
| 开放接口 | 登录 | swan.login |
用户分享时可获取当前 web-view 的 URL,即在 onShareAppMessage 回调中返回 webViewUrl 参数,参见上方代码示例。
web-view,web-view会自动铺满整个页面,并覆盖其他组件。swanjs,参见上方相关接口 1 - 代码示例 。web-view组件设置的网页链接中带有中文字符,在 iOS 中会有打开白屏的问题,建议做一下 encodeURIComponent ,参见上方代码示例。A:如果想在 web-view 使用 JSSDK 提供的接口能力,需要引入 swanjs 包,请参考代码示例 - H5 页面。
“2.0.21.js”版本为举例,开发时请参考相关接口 1 - 代码示例中的最新版本号进行填写。
生成的 H5 站点地址放入小程序 web-view 的 src 即可。
A:web-view 网页与小程序之间不支持除 JSSDK 提供的接口之外的通信:
A:不能,使用 onShareAppMessage 或者 swan.openShare 进行分享时,path只能设置为小程序页面的 path ,不能设置为 H5 页面的 url ,若想回到对应的 H5 页,参见上方代码示例 - 跳转页面。