将 WebView 加入你的应用
¨在Webview中使用 JavaScript
¨启用 JavaScript
¨将 JavaScript代码绑定到Android代码
处理页面导航
¨历史记录导航
关键的类
WebView
WebSettings
WebViewClient
相关手册
Web View
如果你想发布一个web app(或者仅仅是一个web页面)作为客户端的一部分,你可以使用WebView。WebView是Android中 View的扩展,能让你将web页面作为你的活动布局(activity layout)。它不包含一个浏览器的完整功能,比如导航控制或者地址栏。 WebView默认做的仅仅是展现一个Web页面。
使用 WebView的一个常见场景是当你想要在应用中提供一些你可能需要更新的信息的时候,比如终端用户协议或者用户指南。在你的Android应用中,你需要创建包含WebView的Activity ,然后利用它来展现你挂在网上的文档。
另外一个使用WebView的场景是你为用户提供的数据时需要连接网络来获取数据,比如email。在这种情况下,你可能会发现在Android应用中构建一个WebView来展现提供相关数据的web页面更为容易,而不是试图连接到网络获取数据,解析数据并将其安置到Android布局中。你可以设计一个专供Android设备使用的web页面,并在Android中实现一个WebView来加载这个页面。
该文档展示了你可以如何开始使用 WebView并额外做一些事情,比如页面导航、将web页面中的Javascript代码绑定到你的Android应用中的代码上去。
将 WebView 加入你的应用
要在你的应用中加入WebView ,只需要在你的活动布局中加入元素即可。例如,下面是一个布局文件,在这个文件中,WebView 占满了屏幕。
- <?xmlversion="1.0"encoding="utf-8"?>
- <WebViewxmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/webview"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- />
要在 WebView加载页面, 使用 loadUrl()。例如:
- WebViewmyWebView=(WebView)findViewById(R.id.webview);
- myWebView.loadUrl("http://www.example.com");
在它有效工作之前,你要保证你的应用能访问网络。要访问网络,需要在你的配置文件中获取INTERNET许可。例如:
- <manifest...>
- <uses-permissionandroid:name="android.permission.INTERNET"/>
- ...
- </manifest>
这就是你要应用一个WebView 来展现web页面基本的所要做的所有事情了。
在WebView中使用JavaScript
如果你想要你加载在WebView中的web页面使用Javascript,你需要在WebView中启用Javascript。一旦启用Javascript,你就可以在你的应用代码以及你的Javascript代码间创建接口了。
启用JavaScript
你可以通过WebView中带有的 WebSettings来启用它。你可以通过 getSettings()来获取 WebSettings的值,然后通过setJavaScriptEnabled()来启用JavaScript。
例如:
- WebViewmyWebView=(WebView)findViewById(R.id.webview);
- WebSettingswebSettings=myWebView.getSettings();
- webSettings.setJavaScriptEnabled(true);
WebSettings 还提供了很多其他有用的设置。比如,如果你在开发一个专用于Android应用中 WebView 的web app,那么你就可以通过 setUserAgentString()定义自定义用户代理字符串(custom user agent string),然后通过在web页面中查询自定义用户代理来确认正在请求你的web页面的客户端确实是Android应用。
将JavaScript 代码绑定到Android 代码
在开发专用于Android应用中 WebView 的web app时,你可以在你的Javascript代码和客户端的Android代码间创建接口。例如,你的Javascript代码可以调用Android代码中的方法来展示一个Dialog,而不是使用Javascript中的alert()函数。
为了在你的Javascript和Android代码间绑定一个新的接口,需要调用addJavascriptInterface(),传给它一个类实例来绑定到Javascript,以及一个接口名让Javascript可以调用以便来访问类。
例如:你可以在你的Android应用中包括如下类:
- publicclassJavaScriptInterface{
- ContextmContext;
- JavaScriptInterface(Contextc){
- mContext=c;
- }
- publicvoidshowToast(Stringtoast){
- Toast.makeText(mContext,toast,Toast.LENGTH_SHORT).show();
- }
- }
在这个例子中,JavaScriptInterface让web页面可以使用showToast()方法来创建一个Toast 消息。
你可以通过 addJavascriptInterface()绑定这个类到在WebView 运行的Javascript,并将接口命名为Android。例如:
- WebViewwebView=(WebView)findViewById(R.id.webview);webView.addJavascriptInterface(newJavaScriptInterface(this),"Android");
这段代码为在WebView 运行的Javascript创建了一个名为Android的接口。这时候,你的web app就能访问JavaScriptInterface 类了。例如,下面是一些HTML以及Javascript,在用户敲击按钮的时候,它们使用这个新接口创建一个toast消息:
- <inputtype="button"value="Sayhello"onClick="showAndroidToast('HelloAndroid!')"/>
- <scripttype="text/javascript">
- functionshowAndroidToast(toast){
- Android.showToast(toast);
- }
- </script>
没有必要从Javascript初始化Android接口, WebView会自动让它可以为你的web页面所用。所以,在按下按钮的时候,showAndroidToast() 函数会用这个Android接口来调用 JavaScriptInterface.showToast() 方法。
注意:绑定到你的Javascript的对象在另一个线程中运行,而不是在创建它的线程中运行。
小心:使用 addJavascriptInterface()可以让Javascript控制你的Android应用。这是一把双刃剑,有用的同时也可能带来安全威胁。当WebView 中的HTML不可信时(例如,HTML的部分或者全部都是由一个未知的人或者进程提供的),那么一个攻击者就可能使用HTML来执行客户端的任何他想要的代码。因此,不应该使用addJavascriptInterface() ,除非WebView中的所有HTML以及Javascript都是你自己写的。你同样不应该让用户在你的WebView可以定向到另外一个不是你自己的web页面上去(相反,让用户的默认浏览器应用打开外部链接——用户浏览器默认打开所有URL链接,因此一定要小心处理页面导航,像下面一节所描述的那样。)
处理页面导航
当用户点击一个WebView中的页面的链接时,默认是让Android启动一个可以处理URL的应用。通常,是由默认的浏览器打开并加载目标URL的。然而,你可以在 WebView中覆盖这一行为,那么链接就会在WebView中打开。这样,你就可以让用户通过保存在WebView中的浏览记录前进或者后退了。
要想让用户可以通过点击打开链接,只需要使用 setWebViewClient()为WebView提供一个 WebViewClient即可。例如:
- WebViewmyWebView=(WebView)findViewById(R.id.webview);
- myWebView.setWebViewClient(newWebViewClient());
这样就可以了。现在所有用户点击的链接都会直接在WebView中加载了。
如果你想要对于加载的链接的位置有更多控制,你可以创建自己的WebViewClient,覆盖 shouldOverrideUrlLoading()方法。例如:
- privateclassMyWebViewClientextendsWebViewClient{
- @Override
- publicbooleanshouldOverrideUrlLoading(WebViewview,Stringurl){
- if(Uri.parse(url).getHost().equals("www.example.com")){
- returnfalse;
- }
- Intentintent=newIntent(Intent.ACTION_VIEW,Uri.parse(url));
- startActivity(intent);
- returntrue;
- }
- }
然后为 WebView创建一个新的 WebViewClient的实例。
- WebViewmyWebView=(WebView)findViewById(R.id.webview);
- myWebView.setWebViewClient(newMyWebViewClient());
现在当用户点击链接的时候,系统会调用shouldOverrideUrlLoading(),来检查URL host是否和某个特定的域匹配(如上面的定义)。如果匹配,那么该方法就返回false,不去覆盖URL加载(它仍然让WebView 像往常一样加载URL)。如果不匹配,那么就会创建一个Intent来加载默认活动(default Activity)来处理URLs(通过用户默认的web浏览器解析)。
历史记录导航
当你的 WebView覆盖了URL加载,它会自动生成历史访问记录。你可以通过 goBack() 或 goForward()向前或向后访问已访问过的站点。
例如,下面的代码实现了通过 Activity来利用设备的后退按钮来向后导航:
- @Override
- publicbooleanonKeyDown(intkeyCode,KeyEventevent){
- if((keyCode==KeyEvent.KEYCODE_BACK)&&myWebView.canGoBack(){
- myWebView.goBack();
- returntrue;
- }
- returnsuper.onKeyDown(keyCode,event);
- }
如果有历史访问记录可供访问,canGoBack() 方法会返回true。类似地,你可以使用canGoForward()来检查是否有向前访问历史。如果你不做这个检查,那么一旦用户访问到历史记录最后一项,goBack() 或 goForward()什么都不会做。
分享到:
相关推荐
Android加载assets里的html并实现WebView与JavaScript的交互
工具使用WebView从您的golang http服务器构建Android应用
Android 基于x5Webview 浏览文件 office文档 已测试Android11 功能实现
使用与支持 Vuplex VR/AR 浏览器的相同代码,即可轻松在 Windows 和 macOS 上以 3D 形式渲染 Web 内容并与之进行交互 该软件包支持 Android ≥ 6.0 上的原生视频和 WebGL,但某些 VR 虚拟现实头盔(如 Oculus Go 和 ...
Android-X5WebView基本封装和使用 通过OkHttp拦截器、自定义CookieJar有效完成客户端与H5端的Cookie同步管理 监听WebView的加载进度 滚动条的设置(隐藏或者显示,内侧显示还是外侧显示) 优化X5WebView的预加载问题...
1.前端开发离不开Chrome的开发者工具,尤其是调试Android WebView时。...3.本包内自带Chrome浏览器、离线调试包,用法解压包后文档中会有详细说明亲测保证可用,离线webview调试工具,开发H5混合应用必备。
android webview开发应用,用户可看到源码是个不错的学习资料
3D WebView for Android and iOS Web Browser
现在web app越来越多,webview控件的使用也越来越重要。 有时我们会在启动页或引导页之后,加载一个webview为控件的主页。 但如果跳转之后再加载,会看到webview有一个加载的过程,如果网页较大可能加载起来会很慢。...
开发工具:android studio 注意:部分网站可能不兼容自行百度修改 第二版:在原有基础上处理了网页部分按钮无法点击的情况,修复了无法播放网页提示音的情况,修复了无法使用上传图片的情况(之前点击上传无反应,...
Android WebView 去除标题 利用javacript交互
3D WebView for Android with Gecko Engine Web Browser 4.1版本 该版本官方发布时间:2022年5月16日 此插件199美刀,unity版本要使用2018.4.36以上的版本 作者用的2019.4.14 完美没有报错 作者有使用这案例的教程,...
3D WebView for Android and iOS Web Browser4.1
Android WebView 加载 PDF 文件实现。其原理就是在 app 本地搭建一个 website ,然后利用 WebView 加载这个站点,站点去实现加载显示 PDF 的目的,站点其原理也是采用 js 框架去实现的。
3D WebView for Android Web Browser 3.16
对于 Android 、Oculus 虚拟现实头盔和 iOS,视频支持存在局限性(常规的 HTML5 视频标签及 YouTube、Vimeo 和 Facebook 等热门网站上的视频效果较好,但某些第三方 JS 视频小部件无法正常运行)。 • 由于 iOS 的...
android webview的用法总结
对于 Android 、Oculus 虚拟现实头盔和 iOS,视频支持存在局限性(常规的 HTML5 视频标签及 YouTube、Vimeo 和 Facebook 等热门网站上的视频效果较好,但某些第三方 JS 视频小部件无法正常运行)。 • 由于 iOS 的...
练习:WebView控件使用(链接有道词典查单词)