Android系统 WebView是什么?有什么用?

html-css08

Android系统 WebView是什么?有什么用?,第1张

现在越来越多的APP都内置了Web网页去加载视图,也就是我们常说的Hybrid APP混合应用,市场上很多平台都是这样做的,比如我们经常使用的淘宝、京东等电商平台。这些是如何实现的呢?在我们Android中有一个WebView组件,它就可以实现此类功能。它是Android中的原生UI控件,主要用于在APP应用中方便地访问远程网页或本地HTML资源,同时WebView也在Android中充当Java代码和JS代码之间交互的桥梁,实际上也可以将WebView看做一个功能最小化的浏览器。下面我们一起来看看WebView的一些常用的使用方法。

WebView是Android系统提供的一个能显示网页的系统控件,它是一个特殊的View,同时也是一个ViewGroup,可以有很多其他子View。在Android 4.4以下(不包含4.4)系统WebView底层实现是采用WebKit内核,而在Android 4.4及其以上Google采用了Chromium内核作为系统WebView的底层内核支持。在这一变化中Android提供的WebView相关API并没有发生较大变化,在4.4上也兼容低版本的API并且引进了少部分API。这里简单介绍下基于Chromium的WebView和基于WebKit的WebView之间的差异,基于Chromium的Webview提供了更广的HTML5、CSS3、JavaScript支持,在Android系统版本5.0上基于Chromium 37,WebView提供了绝大多数的HTML5特性支持,除此之外Chromium也支持远程调试(Chrome DevTools)。WebKit JavaScript引起采用WebCore JavaScript在Android 4.4上换成了V8能直接提升JavaScript性能。

二、作用

1、显示和渲染Web页面

2、使用html文件(网络上或本地assets中)作为布局

3、可与JavaScript交互调用

注: WebView控件功能强大,除了具有一般View的属性和设置外,还可以对Url请求、页面加载、渲染、页面交互进行强大的处理。

苹果从iOS8增加了WKWebView以来。和UIWebView和平相处多年。

WKWebView从性能上和资源使用方面确实更胜一筹。但也存在一些很奇怪的兼容问题。

各路苹果开发者大神也总结很多经验。例如,

如何从UIWebView迁移到WKWebView,采坑分享。

WKWebView和UIWebView的性能比对等。

站在前人的基础上,终于摸索了这个控件。(本人不是苹果开发者,没有系统学习过objective-c和swift。只是运用c#语言和mono框架开发iphone的工具而已)

回到兼容的这个问题,大概是这样:

在混合app中html5单页页面,各个业务逻辑视图叫做view(例如主视图),他们的高宽都是100%沾满整个屏幕。

例如 主view和设置view。主视图的按钮触发后,主视图margin-left:-100%,设置视图left:0px,这样显示设置视图

在WKWebView中,强行显示了水平的滚动条,即使在禁止缩放并且锁定缩放1.0情况下。

如图,可以左右拖动视图,inspect中查看元素,html和body显示的宽度都是100%的屏幕宽度。和图主视图是同一个大侠

这下就不能淡定了,body的overflow-x失效了。

而在PC和安卓WebView中甚至是safari浏览器中都显示正常。

我尝试了很多种方式来解决这个问题。否则app也无法正常使用。

1、最快最笨的方法

将除了主视图之外的其他视图display:none,不显示也不占据空间了。切换视图时再让它显示。这个方法不好之处在于,由于要使用简单的css3动画,切换显示隐藏导致动画失效。

2、尝试设置html,body样式overflow:hidden,设置documentElement.style.overflow

无效

3、尝试从WKWebView的ScrollView对象设置禁止滚动,依然无效。

4、最终发现, 将视图view放入一个div容器,设置容器样式:width:100%position:relative即可解决。切记,这个容器还不能是body,否则同样没有效果。

记录下以免忘了。