大部分内容为网上整理其它高人的帖子,现只作整理,用于查看:
在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。
什么是webkit
WebKit是Mac OS X v10.3及以上版本所包含的软件框架(对v10.2.7及以上版本也可通过软件更新获取)。 同时,WebKit也是Mac OS X的Safari网页浏览器的基础。WebKit是一个开源项目,主要由KDE的KHTML修改而来并且包含了一些来自苹果公司的一些组件。
传统上,WebKit包含一个网页引擎WebCore和一个脚本引擎JavaScriptCore,它们分别对应的是KDE的KHTML和KJS。不过, 随着JavaScript引擎的独立性越来越强,现在WebKit和WebCore已经基本上混用不分(例如Google Chrome和Maxthon 3采用V8引擎,却仍然宣称自己是WebKit内核)。
这里我们初步体验一下在android是使用webview浏览网页,在SDK的Dev Guide中有一个WebView的简单例子 。
在开发过程中应该注意几点:
1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true);
3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。
- mWebView.setWebViewClient(newWebViewClient(){
- publicbooleanshouldOverrideUrlLoading(WebViewview,Stringurl){
- view.loadUrl(url);
- returntrue;
- }
- });
4.如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。
- publicbooleanonKeyDown(intkeyCode,KeyEventevent){
- if((keyCode==KeyEvent.KEYCODE_BACK)&&mWebView.canGoBack()){
- mWebView.goBack();
- returntrue;
- }
- returnsuper.onKeyDown(keyCode,event);
- }
下一步让我们来了解一下android中webview是如何支持javascripte自定义对象的,在w3c标准中js有 window,history,document等标准对象,同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理,这样使用js就可以 为所欲为了。
看一个实例:
- publicclassWebViewDemoextendsActivity{
- privateWebViewmWebView;
- privateHandlermHandler=newHandler();
- publicvoidonCreate(Bundleicicle){
- super.onCreate(icicle);
- setContentView(R.layout.webviewdemo);
- mWebView=(WebView)findViewById(R.id.webview);
- WebSettingswebSettings=mWebView.getSettings();
- webSettings.setJavaScriptEnabled(true);
- mWebView.addJavascriptInterface(newObject(){
- publicvoidclickOnAndroid(){
- mHandler.post(newRunnable(){
- publicvoidrun(){
- mWebView.loadUrl("javascript:wave()");
- }
- });
- }
- },"demo");
- mWebView.loadUrl("file:///android_asset/demo.html");
- }
- }
我们看addJavascriptInterface(Object obj,String interfaceName)这个方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是 interfaceName(demo),作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过 javascript:window.demo访问到绑定的java对象了。来看看在html中是怎样调用的。
- <html>
- <mce:scriptlanguage="javascript"><!--
- functionwave(){
- document.getElementById("droid").src="android_waving.png";
- }
- //--></mce:script>
- <body>
- <aonClick="window.demo.clickOnAndroid()">
- <imgid="droid"src="android_normal.png"mce_src="android_normal.png"/><br>
- Clickme!
- </a>
- </body>
- </html>
这样在javascript中就可以调用java对象的clickOnAndroid()方法了,同样我们可以在此对象中定义很多方法(比 如发短信,调用联系人列表等手机系统功能。),这里wave()方法是java中调用javascript的例子。
这里还有几个知识点:
1)为了让WebView从apk文件中加载assets,Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的 assets目录中找内容。如上面的"file:///android_asset/demo.html"
2)addJavascriptInterface方法中要绑定的Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用 Handler的目的。
/**
* @author 张兴业
* 邮箱:xy-zhang#163.com
* android开发进阶群:278401545
*
*/
分享到:
相关推荐
Android8.0以下手机自带的android-system-webview版本过低使用
Android-X5WebView基本封装和使用 通过OkHttp拦截器、自定义CookieJar有效完成客户端与H5端的Cookie同步管理 监听WebView的加载进度 滚动条的设置(隐藏或者显示,内侧显示还是外侧显示) 优化X5WebView的预加载问题...
unity-webview-integration-master unity-webview-integration-master unity-webview-integration-master
在开发中,有时候我们会在app中使用WebView加载一个web页面。这样可以适当减轻我们开发的难度。但是弊端是WebView中切换html,没有像原生页面的切换效果。这里我们就利用动画,以及 获取网页的快照来实现android ...
react-native-android-webview解决React Native自带的WebView组件Android不能拦截URL的问题安装npm install react-native-android-webview --save 本机库链接安卓android/settings.gradle添加到android/settings....
webview android-javascript
android--开发中WebView的使用.docx
•Android---UI篇---WebView(网络视图) • •Andorid---UI篇---两种进度条(ProgressBar) • •Android---UI篇---Dialog(对话框) • •Android---UI篇---AutoCompleteTextView(自动提示) • •Android---UI篇...
浏览器 关于webview--android android webview 浏览器 浏览器 关于webview--android android webview 浏览器
android--开发中WebView的使用.pdf
webview socket 完整版的demo实现,可以支持使用
iOS默认情况下支持此行为,因此将仅使用本机iOS WebView。 入门 yarn add hummingbird-me/react-native-android-fullscreen-webview 自动链接库 react-native link 更新AndroidManifest.xml 在您的主要活动下,...
Android -- webview全屏播放HTML video.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android WebView 加载 PDF 文件实现。其原理就是在 app 本地搭建一个 website ,然后利用 WebView 加载这个站点,站点去实现加载显示 PDF 的目的,站点其原理也是采用 js 框架去实现的。
适用于Android项目中webview的缓存,可以指定缓存目录,缓存时间,有问题请加,谢谢
解决React-Native的WebView不支持Android选择图片和拍照
Android客户端加载html,实现WebView与Html交互