不久前微信小程序发布了web-view组件,这个消息在各个圈里引起不小的涟漪。近期正好在做小程序的项目,便研究了一下这个让大家充满期待的组件。
 
1,web-view这个组件是什么鬼?
官网的介绍:web-view 组件是一个可以用来承载网页的容器,会自动铺满整个小程序页面。简单来说,这个组件是一个和当前页面一样大小的容器,容器里显示的是属性src引用的url的内容。类似于html中的iframe框架。不同的是iframe可以自定义大小边框等样式,webview自动铺满整个小程序页面。
 
2,这个组件能给我们带来什么?
小程序的页面开发虽然和HTML开发类似,但小程序有自己定义的标签,且不支持HTML标签。这样HTML那些丰富的标签在小程序开发中完全无用武之地,也就限制了页面的表现形式。对于已经开发了移动网站的项目来说,若想要开发个小程序版本,就只能优雅降级重新开发了,有了这个组件,搭个框架简单一行代码就够了。更新小程序版本的话,需要微信审核,如果把内容放在嵌入的网页上,热更新搞定。除了这些,网站上那些运营方案也让大家跃跃欲试。
 
3,web-view组件使用
虽然开放了这个组件,但使用时有很多限制:
使用限制:对个人类型和海外类型的小程序暂不支持
指向域名的限制:域名必须为https协议且经过ICP备案
域名修改限制:一个小程序最多可添加20个域名,一年可修改50次
小程序基础库限制:基础裤1.6.4以上版本支持这个组件,低版本需做兼容
注:配置域名时,并不是随便一个备案过的https就可以的,需要从配置后台下载校验文件放在域名根目录下,验证通过后才能配置成功。
 
克服以上重重难关后,在小程序项目中新建页面,配置路径,页面加入以下代码:
<!-- wxml -->
<!-- src地址是需要指向的网站地址 -->
<web-view src="https://mp.weixin.qq.com/"></web-view>
对,就这简单的一行代码就可以让网站的内容显示在小程序里。
 
4,webview网页和小程序的联系
小程序提供了webview网页中使用的JSSDK文件,引用方式如下:
<!-- html -->
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.0.js"></script>

// javascript
wx.miniProgram.navigateTo({url: '/path/to/page'})
引入SDK后可以调用小程序JSSDK提供的接口,虽然不如小程序原生接口丰富,也能获取到设备网络状态、地理位置等信息,另外还提供了微信扫一扫、摇一摇、长按识别、拍照等接口。
 
截止当前版本,小程序基本不能获取网页的数据,只有在用户分享的时候,可以从返回的参数中获取web-view组件当前显示的页面路径。
 
由上可见webview网页和小程序间数据的联系非常弱。还有没有可以传输更多数据的方式呢?不死心又验证了两者的localStorage,结果是并不互通。
 
5,web-view组件其他表现
Q:web-view组件对网页重定向的表现
A:如果重定向的域名在当前小程序的业务域名下,可以重定向(301、301均可);否则提示无法打开
 
Q:打开web-view组件页面,其他页面是否被销毁
A:页面是否被销毁,不受当前页面是否为web-view组件页的影响。另外,小程序tab页面有切换时只加载一次并缓存页面的特性,这一特性对web-view组件页面同样适用。若将web-view组件页设置为tab页面,web-view组件页和加载的业务域名网站同样会被缓存,且设置为tab页的web-view组件页会保留tab组件显示。
 
Q:webview页面通过scheme打开手机app的表现
A:小程序并不能正确解析app配置的scheme,所以也不能通过scheme打开app。若通过scheme做跳转,在开发者工具中调试时会出现“ERR_UNKNOWN_URL_SCHEME”的错误,在移动客户端上表现为没有反应。
 
6,总结
小程序和网页间数据交互还太弱,对小程序第三方组件开发者来说并不能很好发挥作用。比如在对小程序数据做统计时,并不能很好的收集用户在webview页面的行为。如果小程序和webview网页的存储能打通,将带来更多可能性,但微信对每个小程序Storage设置的上限为10MB,而且其存储类型和浏览器也并不一致,所以打通的可能性并不大。如果在小程序中能监听到webview页面内url请求,也许可以尝试像hybrid一样通过url传递数据做统计。期待小程序在web-view组件上能开放更多功能~
 

小程序web-view组件的更多相关文章

  1. 一套代码小程序&Web&Native运行的探索06——组件系统

    接上文:一套代码小程序&Web&Native运行的探索05——snabbdom 对应Git代码地址请见:https://github.com/yexiaochai/wxdemo/tre ...

  2. 一套代码小程序&Web&Native运行的探索05——snabbdom

    接上文:一套代码小程序&Web&Native运行的探索04——数据更新 对应Git代码地址请见:https://github.com/yexiaochai/wxdemo/tree/ma ...

  3. 一套代码小程序&Web&Native运行的探索04——数据更新

    接上文:一套代码小程序&Web&Native运行的探索03 对应Git代码地址请见:https://github.com/yexiaochai/wxdemo/tree/master/m ...

  4. 小程序web开发框架-weweb介绍

    weweb是一个兼容小程序语法的前端框架,你可以用小程序的写法,来写web单面应用.如果你已经有小程序了,通过它你可以将你的小程序运行在浏览器中.在小程序大行其道的今天,它可以让你的小程序代码得到最大 ...

  5. 微信小程序之swiper组件高度自适应

    微信小程序之swiper组件高度自适应 要求: (顶部广告栏 ) 改变swiper组件的固定高度,使之随内部每张图片的高度做自适应 原理: 图片加载完之后,获取图片的原始宽高,根据宽高比,计算出适应后 ...

  6. 一套代码小程序&Web&Native运行的探索02

    接上文:一套代码小程序&Web&Native运行的探索01,本文都是一些探索性为目的的研究学习,在最终版输出前,内中的内容可能会有点乱 参考: https://github.com/f ...

  7. 微信小程序中的组件使用1

    不管是vue还是react中,都在强调组件思想,同样,在微信小程序中也是使用组件思想来实现页面复用的,下面就简单介绍一下微信小程序中的组件思想. 组件定义与使用 要使用组件,首先需要有组件页面和使用组 ...

  8. 小程序解决方案 Westore - 组件、纯组件、插件开发

    数据流转 先上一张图看清 Westore 怎么解决小程序数据难以管理和维护的问题: 非纯组件的话,可以直接省去 triggerEvent 的过程,直接修改 store.data 并且 update,形 ...

  9. 微信小程序之自定义组件的应用

    小程序支持自定义组件,下面是一个简单的购物车组件,实现的效果如图: 效果图 创建组件 在根目录创建components目录,然后创建计数组件 count 如图: 组件内容 <!--compone ...

  10. 微信小程序自定义音频组件,自定义滚动条,单曲循环,循环播放

    小程序自定义音频组件,带滚动条 摘要:首先自定义音频组件,是因为产品有这样的需求,需要如下样式的 而微信小程序API给我们提供的就是这样的 而且产品需要小程序有后台播放功能,所以我们不考虑小程序的 a ...

随机推荐

  1. YYHS-string(线段树)

    题解 这道题给你两个操作,一个升序,一个降序 我们可以观察到这个字符串都是由小写字母组成的,只有26个字符,所以我们开一个26个字符的线段树 每次查询的时候找到这个区间内'a'到'z'的数量,再判断一 ...

  2. [js高手之路] 设计模式系列课程 - jQuery的extend插件机制

    这里在之前的文章[js高手之路] 设计模式系列课程 - jQuery的链式调用与灵活的构造函数基础上增加一个extend浅拷贝,可以为对象方便的扩展属性和方法, jquery的插件扩展机制,大致就是这 ...

  3. win10 uwp 模拟网页输入

    有时候需要获得网页的 js 执行后的源代码,或者模拟网页输入,如点按钮输入文字. 如果需要实现,那么就需要用 WebView ,使用方法很简单. 首先创建一个 WebView ,接下来的所有输入都需要 ...

  4. hover与click样式冲突

    如果你的hover事件和click事件的样式不同,如元素背景本来是#fff,如果hover时背景是#ddd,点击时背景是#aaa,那么问题是当你点击后,鼠标再移动到这个元素时背景会变成#ddd,而你希 ...

  5. VIM格式化代码(How to format code with VIM)

    1) 按两下小写g,即gg,定位光标到第一行.(2) 按住Shift+v,即大写V,进入可视化编辑的列编辑模式.(3) Shift+g,即大写G,选中整个代码.(4) 按下等号=,格式化所有代码.

  6. SQL数据库的基础操作

    一,认识SQL数据库 美国Microsoft公司推出的一种关系型数据库系统.SQLServer是一个可扩展的.高性能的.为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有 ...

  7. MySQL锁类型以及子查询锁表问题、解锁

    MySQL中select * for update锁表的范围 MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock,所以只有「明确」的指定主 ...

  8. 顺序线性表 ---- ArrayList 源码解析及实现原理分析

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7738888.html ------------------------------------ ...

  9. angular高级篇之transclude使用详解

    angular指令的transclude属性是一个让初学者比较难以理解的地方,transclude可以设置为false(默认),true或者对象三种值,如果不设该属性就默认为false,也就是说你不需 ...

  10. Java开发必装的IntelliJ IDEA插件

    IDEA 插件简介 常见的IDEA插件主要有如下几类: 常用工具支持 Java日常开发需要接触到很多常用的工具,为了便于使用,很多工具也有IDEA插件供开发使用,其中大部分已经在IDEA中默认集成了. ...