首页 > 手机软件 > WebView官方最新版
WebView官方最新版

WebView官方最新版

类型:
手机软件
版本:
v122.0.6261.43
语言:
简体中文
大小:
68.5M
等级:
更新:
2024-03-13 11:59:34
  • 游戏介绍
  • 相关游戏
  • 人气推荐

Android System WebView是Android电脑操作系统中的一个部件,它允许Android应用软件在应用程序的操作界面内表明网页页面。它充当了一个Web浏览器引擎,承担3D渲染网页页面、实行JavaScript代码和解决其他与Web有关的功效。在Android 7.0(Nougat)以前,WebView作为一个独立应用程序捆绑在一起,并且通过Google Play店铺更新。从Android 7.0逐渐,WebView成为一个系统组件,根据基本系统升级更新。

很多Android应用软件,尤其是那些包括网页页面或根据Web的功效应用程序,取决于WebView来反映网页页面或者与Web服务项目进行交互。通过运用WebView,开发者能够无接缝地则在应用程序中置入网页页面,进而建立更为集成化的使用体验。根据WebView标注的Web具体内容一般根据设备中默认Web浏览器所使用的同样3D渲染引擎,比如Google Chrome或Android浏览器(在Chrome变成默认设置浏览器之前使用的浏览器)。那样能够确保开发者在不同应用程序中给予一致的Web感受,以确保与Web标准及科技的兼容模式。

webview是啥

webview是一个可视化部件,是原生APP视觉上的一部分。能够嵌入在移动端,完成核心技术的混合开发设计,大部分混合前端框架都是围绕WebView方式进行二次开发的。例如:APIcloud、uni-app等框架。

一、webview入门知识

1、大家通常是用浏览器来打开网页,你也很清楚的了解你在使用浏览器,要么就是PC手机客户端,要么就是手机上面的app。可是webview是一个内嵌式浏览器,是内嵌在原生应用中的,你估计都没有意识到你在使用浏览器。

2、传统式浏览器分为两个部分,UI(搜索框、导航条)和浏览器引擎。webview便是原生应用中的浏览器引擎。

3、webview只是一个可视化部件,是原生APP视觉上的一部分。

4、用webview展示的内容是不用存放在本地的,可以直接从网络服务器获得。

5、这类协调能力开启了浏览器端web运用与希望展现在原生应用中的web运用编码立即可重用的全球。

6、工作在webview里的JS编码有实力调用原生的软件API,没有传统浏览器沙盒限制。

7、沙盒的出现是由于,你永远无法完全信任加载的web具体内容,因此不能允许它调用原生的软件API。但在webview中开发者通常可以良好控制加载内容,恶意程序进到并且在设备中导致错乱的可能性很低。

8、在webview中,JS编码能跟原生运用编码彼此通讯,还可以调用原生API集成化绚丽的系统级作用,如感应器、存放、日历、手机联系人等。

二、webview的使用方法

1、做为APP内嵌浏览器,表明连接的具体内容。

2、用于显示广告。

3、彻底承重APP中的所有互动。从专业角度观察这种仍然是原生运用,但是它做出来的唯一原生操作就是代管webview,这类运用被称作混和运用。从布署和更新的角度看,混和运用十分方便。

4、做为原生运用的扩展。很多原生运用可以提供加载项或谷歌扩展程序来扩展它的功能,因为web技术性简单地性和强大,这种加载项和拓展一般以HTML、CSS、JS而非C++、C#或其它来建立。

三、webview的真谛

webview其实只是一个再运用中加入最佳位置和大小的小浏览器,而且不摆放一切花哨的UI。

在很多情况下,如果你调用了原生API,不然无须在webview中专业检测web运用。

WebView几个普遍作用操作方法

android的WebView部件可以说是相当的强劲,现就工程中经常用到的好多个作用归纳如下:

一、背景设置

WebView.setBackgroundColor(0);//先设定背景颜色为transparent

WebView.setBackgroundResource(R.drawable.yourImage);//随后设置背景图片

二、得到WebView网页页面加载复位和完成事情

流程:

1、创建一个自已的WebViewClient(传承 WebViewClient 类)如WebViewClient

2、轻载里边的 onPageFinished(WebView view, String url)方式,(webview加载进行会调用用这种方法),用这种方法放自身想要做的事情,在webview加载完成之后

3、关系你的webviewclient 与 webview 根据 用这种方法:webView.setWebViewClient( new WebViewClient();

如果有需要监控加载进度,必须创建一个自已的WebChromeClient类,并重载方法onProgressChanged,再

合理布局文档:

需要注意的是,这其中的webView的一系列使用方法,例如 webView.getSettings()。setJavaScriptEnabled(true);设定可以用javscript;

等,具体参考API

而时间轴的应用要在new出一个setWebChromeClient后,能够以内部类中写 onProgressChanged事情

汇总:在WebView设计过程中,并不是什么事情都要WebView类做的,有一些琐事是分到别人的,那样WebView专心致志干好自己分析、3D渲染工作中就可以了。

WebViewClient就是帮助WebView处理一些通告、要求事件,从总体上包含:

onLoadResource

onPageStart

onPageFinish

onReceiveError

onReceivedHttpAuthRequest

WebChromeClient是辅助WebView解决Javascript的提示框,网站图标,网址title,加载进展等

onCloseWindow(关掉WebView)

onCreateWindow()

onJsAlert (WebView上alert是弹不出来了的东西就,必须订制你WebChromeClient解决弹出来)

onJsPrompt

onJsConfirm

onProgressChanged

onReceivedIcon

onReceivedTitle

以上就是关于文中的相关内容,希望对大家的学习培训有一定的帮助,也希望大家多多适用3322。

Android WebView的具体实现与Chromium3D渲染引擎启动电路

这里以Android 8.0的源代码为来表明,要先寻找WebView的真实的对象:

这一对象会调用另外一个成员函数ensureProviderCreated()保证Chromium动态库早已加载。在Chromium动态库早已加载的情形下,WebView类成员函数ensureProviderCreated还会继续创建一个WebViewProvider目标,而且储存在成员函数mProvider中。这一WebViewProvider实际上才是一个用于完成WebView的功效的幕后boss。起诉这些Android WebView关键的形式基本上都是根据mProvider来完成的,比如loadUrl(String url)等方式。

有了这样的mProvider以后,WebView类的构造函数就会继续调用mProvider.init(javaScriptInterfaces, privatepowsing)运行网页页面3D渲染引擎。针对根据Chromium达到的WebView而言,并且使用的WebViewProvider是一个WebViewChromium目标。当一个WebViewChromium对象成员函数init被调用时,它就会启动Chromium的网页3D渲染引擎。

因此,我们接下来看一下ensureProviderCreated的完成:

WebView类成员函数ensureProviderCreated最先调用成员函数checkThread保证是指在WebView的创建线程中调用的,下面又分辨成员函数mProvider数值是否属于null。如果为null,则表示它都还没现阶段建立的WebView建立过Provider。在这样的情况下,它首先会调用成员函数getFactory获得一个WebViewFactory。有了这样的WebViewFactory以后,就能调用它成员函数createWebView创建一个WebViewProvider。

下面我们再看一下getFactory()方式以及它完成:

getFactory返回WebView Factory是由调用WebViewFactory类静态成员函数getProvider所获得的,getProvider关键在于分辨静态成员函数sProviderInstance数值是不是相当于null。假如相当于null,那么就说明现阶段的App进程都还没加载过Chromium动态库。在这样的情况下,那就需要加载Chromium动态库,而且创建一个WebView Factory,储存在静态成员函数sProviderInstance。下面我们就先分析Chromium动态库的加载全过程,然后剖析WebView Factory的创建全过程。

加载Chromium动态库是由调用WebViewFactory类静态成员函数loadNativeLipary达到的:

loadNativeLipary都会先调用成员函数getWebViewNativeLiparyPaths得到要加载的Chromium动态库的目标文件夹,然后调用另外一个静态成员函数nativeLoadWithRelroFile对它进行加载。在加载时,会指定一个Chromium GNURELRO Section文档。这一Chromium GNURELRO Section文件是开机启动情况下,根据运行一个临时性进程产生的。在其中静态成员函数nativeLoadWithRelroFile是一个JNI方式,它是由C++层的函数LoadWithRelroFile完成:

LoadWithRelroFile分辨自己是个32位或是64位完成,再从主要参数lib32和lib64中选择对应的Chromium动态库开展加载。

这一加载全过程是由调用此外一个函数DoLoadWithRelroFile达到的:

函数公式DoLoadWithRelroFile的完成是由Linker导出的函数公式androiddlopenext在Zyogote进程保存的地址空间中加载Chromium动态库的。留意,App进程是Zygote进程fork出的,所以它同样也会得到Zygote进程预留地址空间。但是,函数公式DoLoadWithRelroFile会把告知函数公式androiddlopenext在加载Chromium动态库时,将主要参数relro描绘的Chromium GNURELRO Section文档内存映射到运行内存来,而且取代掉早已加载的Chromium动态库的GNURELRO Section。这是通过将指定一个ANDROIDDLEXTUSERELRO标示达到的。之所以可以这么做,是由于主要参数relro描绘的Chromium GNURELRO Section文档相对应的Chromium动态库的加载详细地址与现有App进程加载的Chromium动态库地址一致。只需两个一样的动态库在两种不同的进程里的加载详细地址一致,他们链接和重定位信息就是完全一致的,因而就可以用文档内存映射的形式进行分享。分享以后,就能达到节约内存的目地了。

这一步实行完毕之后,App进程就加载进行Chromium动态库了。返回前边讲解的WebViewFactory类静态成员函数getProvider,它下面再次创建一个WebViewFactory。这一WebViewFactory之后就可以用来建立WebViewProvider。

WebViewFactory类静态成员函数getProvider首先要确定要建立的WebView Factory的种类。这个类型是由调用另外一个静态成员函数getFactoryClass所获得的:

从这里出发能够看见,WebViewFactory类静态成员函数getFactoryClass返回WebView Factory的种类为com.android.webview.chromium.WebViewChromiumFactoryProviderForO。这一com.android.webview.chromium.WebViewChromiumFactoryProviderForO类是通过上面提到的WebView Package所提供的。这就意味着WebViewFactory类静态成员函数getProvider建立的WebView Factory是一个WebViewChromiumFactoryProvider目标:

WebViewChromiumFactoryProvider类的构造函数会调用AwpowserProcess类静态成员函数loadLipary对前边加载的Chromium动态库开展复位:

AwpowserProcess类静态成员函数loadLipary又调用LiparyLoader类的静态成员函数loadNow对前边加载的Chromium动态库开展复位:

LiparyLoader类静态成员函数loadNow又调用另外一个轻载版本静态成员函数loadNow对前边加载的Chromium动态库开展复位:

LiparyLoader类轻载版本静态成员函数loadNow又调用另外一个静态成员函数loadAlreadyLocked对前边加载的Chromium动态库开展复位:

因为并非所有的系统软件也支持在加载动态库时,以文档内存映射的形式取代它GNURELRO Section,因而Chromium自身提供了一个Linker。通过这些Linker加载动态库时,能以文档内存映射的形式取代要加载的动态库的GNURELRO Section,也就是实现上面提到的函数公式androiddlopenext的功效。在高过Android 5.0中,导致系统早已带来了函数公式androiddlopenext,因而,Chromium也就不会使用自己的Linker加载动态库,而是使用Android系统提供的Linker来加载动态库。根据调用System类静态成员函数loadLipary既能应用系统提供的Linker来加载动态库。LiparyLoader类静态成员函数loadAlreadyLocked要加载的动态库由NativeLiparies类的静态成员函数LIpARIES特定:

从在这里可以了解,LiparyLoader类静态成员函数loadAlreadyLocked要加载的动态库便是Chromium动态库。这一Chromium动态库之前已经加载过去了,因此这里根据调用System类静态成员函数loadLipary再加载时,仅仅只是只会触发它导出的函数公式JNIOnLoad被调用,不会重新被加载。Chromium动态库导出的JNIOnLoad被调用时,Chromium动态库便会实行复位工作中:

其中的一个复位实际操作就是给Chromium的Content层设置一个形式为AwMainDelegate的Main Delegate。这一AwMainDelegate通过在Chromium的androidwebview板块中。Android WebView是由Chromium的androidwebview控制模块加载和3D渲染页面的。Chromium加载和3D渲染页面的作用也是通过在Content层,因而,Chromium的androidwebview控制模块还得根据Content层完成加载和3D渲染网页页面作用。那样,Chromium的androidwebview控制模块就可以选择一个Main Delegate给Content层,便于他们可以一起通讯。给Chromium的Content层设置一个Main Delegate是由调用函数公式SetContentMainDelegate达到的:

从前面的解读就可以知道,主要参数delegate指向的是一个AwMainDelegate目标,这一AwMainDelegate目标能被函数公式SetContentMainDelegate储存在局部变量gcontentmain_delegate中。这一步实行结束后,Chromium动态库就在那App进程中加载结束,而且也已经完成复位工作中。此外,系统软件同时也为App进程创建了一个形式为WebViewChromiumFactoryProvider的WebViewFactory。返回前边讲解的WebView类成员函数ensureProviderCreated中,这时候他会根据调用以上形式为WebViewChromiumFactoryProvider的WebViewFactory的成员函数createWebView为当前建立的WebView创建一个WebView Provider:

WebViewChromiumFactoryProvider类成员函数createWebView创建的是一个类型为WebViewChromium的WebView Provider。这一WebView Provider可能返回给WebView类成员函数ensureProviderCreated。WebView类成员函数ensureProviderCreated再将这个WebView Provider储存在成员函数mProvider中。那样,已经创建的WebView就获得了一个类型为WebViewChromium的WebView Provider。之后通过这些WebView Provider,就可以根据Chromium来载入和3D渲染网页页面了。

升级日志

v122.0.6261.43版本

低级错误修复改善,安装或升级到全新版本即可看到!

运用截屏

  • WebView官方最新版
  • WebView官方最新版
  • WebView官方最新版
  • WebView官方最新版
  • 1
  • 2
  • 3
  • 4