智能小程序档案馆 —— 聊一聊 web-view 组件

栏目: JavaScript · 发布时间: 7年前

内容简介:哈喽大家好~今天是百度智能小程序学院“智能小程序档案馆”的第一课,在接下来的日子里,小编会定期 or 不定期的为您介绍、解答更多关于智能小程序的使用方法,欢迎大家持续关注,留言互动~很多开发智能小程序的朋友,经常会对于 web-view 组件的使用感到困惑,不知道要如何配置,才能通过使用 web-view 组件来完成融合开发,复用自己之前的 web 页面,今天我们就和大家好好按照官网的说法来讲:“

哈喽大家好~今天是百度智能小程序学院“智能小程序档案馆”的第一课,在接下来的日子里,小编会定期 or 不定期的为您介绍、解答更多关于智能小程序的使用方法,欢迎大家持续关注,留言互动~

很多开发智能小程序的朋友,经常会对于 web-view 组件的使用感到困惑,不知道要如何配置,才能通过使用 web-view 组件来完成融合开发,复用自己之前的 web 页面,今天我们就和大家好好 聊一聊 web-view 组件

web-view组件简介

按照官网的说法来讲:“ web-view 组件是一个可以用来承载网页的容器,会自动铺满整个智能小程序页面。”

其实前端的同学大可以把它理解为类似于一个全屏铺开的, z-index 最高的 iframe 。 访问一个页面时,使用 web-view 组件的 src 属性,它将会覆盖在该页面所有的组件之上。(如图1.1)

智能小程序档案馆 —— 聊一聊 web-view 组件
图1.1

每个页面只能有一个web-view组件,如果有多个,则只有第一个web-view会生效。

web-view组件使用的前提条件

web-view组件中,所使用网页的域名需要提前在开放平台的域名白名单中进行配置。 如图2.1与图2.2:

智能小程序档案馆 —— 聊一聊 web-view 组件
图2.1
智能小程序档案馆 —— 聊一聊 web-view 组件
图2.2

为了监测域名的合法性,我们需要下载一个校验文件,并放到域名的根目录下。这样,开放平台才能校验这个域名是不是属于你的。如果 web-view 组件中使用的域名没有在域名白名单中进行配置,那么 web-view 组件就不会生效。

  • 如果 web-view 使用的网页中使用了 iframe ,那么iframe 的 src 中使用的域名也需要配置到域名白名单中。
  • 页面中发送的 ajax 请求和静态资源请求则不会受到此限制。

web--view组件中可以使用小程序中的一些API,不过前提是要在网页中引用智能小程序的 jssdk ,地址如下:

<script type="text/javascript" src="https://b.bdstatic.com/searchbox/icms/searchbox/js/swan.js"></script>
复制代码

这段脚本会在window上挂载全局变量swan,在代码中可以像这样使用端能力:

swan.webView.navigateTo({url: '/pages/detail/index'});
复制代码

也可以动态使用js插入:

  • 在小程序中:

<!-- 在小程序中 -->
<web-view src="https://m.baidu.com/usrprofile?action=home&model=user&ori=index" bindmessage="mymessage"></web-view>
swan.webView.postMessage({
   data: 1
});
复制代码
  • 在web-view的网页里
var scrip = document.createElement('script');
scrip.src = 'https://b.bdstatic.com/searchbox/icms/searchbox/js/swan.js';
document.body.appendChild(scrip);
复制代码
  • 目前官网的这段脚本使用的还是固定地址。所以,想要使用的同学可以在官网的JSSDK后面加个query,如:?timestamp=xxxx。
  • 防止缓存造成的影响,也可下载到本地CDN进行管理。

web-view组件的UA

通过实际检测,我们发现,在 web-view 中使用网页,可以区分出来小程序与手机百度UA的不同的:

IOS中web-view的UA
Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E217 swan/1.6(web-view) baiduboxapp/10.11.0.0 (Baidu; P2 11.3)
Android中web-view的UA
Mozilla/5.0 (Linux; Android 5.1.1; vivo X7Plus Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/48.0.2564.116 Mobile Safari/537.36 T7/10.11 swan/1.6 baiduboxapp/10.10.0.12 (Baidu; P1 5.1.1)
复制代码

这里可以看到,其中有swan的标识和版本号,并且有webview的标识,妈妈再也不用担心我的网页区分不出来手百与小程序啦~~

这里可以给广大使用webvie,并想检测版本号的同学一个福利 —— 写好的获取版本号的正则!

var ua = `Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E217 swan/1.6(web-view) baiduboxapp/10.11.0.0 (Baidu; P2 11.3)`;
/swan\/([^(]*)\(web-view\)/g.exec(ua);
// 输出结果: ["swan/1.6(web-view)", "1.6", index: 110, input: "Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac O…(web-view) baiduboxapp/10.11.0.0 (Baidu; P2 11.3)", groups: undefined]
复制代码

web-view组件与小程序通讯

web-view组件可以与小程序本体通讯,这样可以间接的通过小程序调用所有swan的API,使用方法如下:

  • 在小程序中:
<!-- 在小程序中 -->
<web-view src="https://m.baidu.com/usrprofile?action=home&model=user&ori=index" bindmessage="mymessage"></web-view>
复制代码
  • 在web-view的网页里
// 在小程序web-view组件的网页中
swan.webView.postMessage({
   data: 1
});
复制代码

通过这种方式,我们就可以实现和小程序的所有交互啦~~

不过需要注意的是,这种postMessage只会在特定时机(小程序后退、组件销毁、分享)触发哦。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

颠覆营销

颠覆营销

陈杰豪、车品觉 / 中信出版社 / 2016-2 / 49.00元

对于大数据未来趋势的判断 车品觉 光阴荏苒,2015年在跌跌荡荡中成了过去式,对于大数据的产业来说过去这一年冒出了很多新的名词。但在我看来,真正的大数据应用和市场才刚刚开始萌芽,所以我希望大家先认清一个关键,那就是所有的数据都是基于应用而产生,而数据经过釆集及整合后又再落实到自身或其他应用情境中,大数据的创新价值可以来自新连接的数据、算法或者产品本身。 过去两年大数据的成长和智能......一起来看看 《颠覆营销》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器