`

android:webView总结

 
阅读更多

android:webView总结  

 

大部分内容为网上整理其它高人的帖子,现只作整理,用于查看:

在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对象。

Java代码 复制代码 收藏代码
  1. mWebView.setWebViewClient(new WebViewClient(){     
  2.                     public boolean shouldOverrideUrlLoading(WebView view, String url) {     
  3.                         view.loadUrl(url);     
  4.                         return true;     
  5.                     }     
  6.         });  
mWebView.setWebViewClient(new WebViewClient(){  
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {  
                        view.loadUrl(url);  
                        return true;  
                    }  
        });




4.如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。

Java代码 复制代码 收藏代码
  1. public boolean onKeyDown(int keyCode, KeyEvent event) {     
  2.         if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {     
  3.             mWebView.goBack();     
  4.                    return true;     
  5.         }     
  6.         return super.onKeyDown(keyCode, event);     
  7.     }   
public boolean onKeyDown(int keyCode, KeyEvent event) {  
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {  
            mWebView.goBack();  
                   return true;  
        }  
        return super.onKeyDown(keyCode, event);  
    } 



下一步让我们来了解一下android中webview是如何支持javascripte自定义对象的,在w3c标准中js有 window,history,document等标准对象,同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理,这样使用js就可以 为所欲为了。

  看一个实例:

Java代码 复制代码 收藏代码
  1. public class WebViewDemo extends Activity {      
  2.     private WebView mWebView;     
  3.     private Handler mHandler = new Handler();     
  4.      
  5.     public void onCreate(Bundle icicle) {     
  6.         super.onCreate(icicle);     
  7.         setContentView(R.layout.webviewdemo);     
  8.         mWebView = (WebView) findViewById(R.id.webview);     
  9.         WebSettings webSettings = mWebView.getSettings();     
  10.         webSettings.setJavaScriptEnabled(true);     
  11.         mWebView.addJavascriptInterface(new Object() {     
  12.             public void clickOnAndroid() {     
  13.                 mHandler.post(new Runnable() {     
  14.                     public void run() {     
  15.                         mWebView.loadUrl("javascript:wave()");     
  16.                     }     
  17.                 });     
  18.             }     
  19.         }, "demo");     
  20.         mWebView.loadUrl("file:///android_asset/demo.html");     
  21.     }     
  22. }    
	public class WebViewDemo extends Activity {   
	    private WebView mWebView;  
	    private Handler mHandler = new Handler();  
	  
	    public void onCreate(Bundle icicle) {  
	        super.onCreate(icicle);  
	        setContentView(R.layout.webviewdemo);  
	        mWebView = (WebView) findViewById(R.id.webview);  
	        WebSettings webSettings = mWebView.getSettings();  
	        webSettings.setJavaScriptEnabled(true);  
	        mWebView.addJavascriptInterface(new Object() {  
	            public void clickOnAndroid() {  
	                mHandler.post(new Runnable() {  
	                    public void run() {  
	                        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中是怎样调用的。

Java代码 复制代码 收藏代码
  1. <html>     
  2.         <mce:script language="javascript"><!--   
  3.      
  4.                 function wave() {     
  5.                     document.getElementById("droid").src="android_waving.png";     
  6.                 }     
  7.            
  8. // --></mce:script>     
  9.         <body>     
  10.             <a onClick="window.demo.clickOnAndroid()">     
  11.                                 <img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br>     
  12.                                 Click me!     
  13.             </a>     
  14.         </body>     
  15. </html>    
<html>  
        <mce:script language="javascript"><!--
  
                function wave() {  
                    document.getElementById("droid").src="android_waving.png";  
                }  
        
// --></mce:script>  
        <body>  
            <a onClick="window.demo.clickOnAndroid()">  
                                <img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br>  
                                Click me!  
            </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的目的。 

 

转载至:http://jaymsimusic.iteye.com/blog/747795

分享到:
评论

相关推荐

    android的webView的登录实例

    总结来说,这个实例展示了如何使用Android Studio 3.1.2创建一个基于WebView的本地HTML登录界面。通过JavaScript接口,我们可以让HTML和Java代码相互通信,从而实现登录功能。在实际应用中,可能还需要考虑更多的...

    Android webview调用摄像头扫描二维码

    本文将详细讲解如何在Android Webview中调用摄像头进行二维码扫描,并结合ZXing(Zebra Crossing)解析包进行二维码的解析。 首先,让我们了解Android Webview的基本用法。Webview是Android SDK提供的一种视图组件...

    Android下WebView中调用系统相机拍照范例

    总结来说,实现Android WebView调用系统相机的功能涉及以下步骤: 1. 添加必要的权限到`AndroidManifest.xml`。 2. 创建一个自定义的WebViewClient,实现调用相机的接口。 3. 在网页中通过JavaScript调用这个接口。 ...

    android使用webView实现java程序与js脚本的相互调用

    在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中加载和显示网页内容。同时,WebView还提供了Java代码与JavaScript交互的能力,使得我们可以利用JavaScript的灵活性和Android原生功能的强大...

    Android webView拍照与展示相册图片

    总结,Android的WebView结合JavaScriptInterface可以实现丰富的功能,包括与系统相机和相册的交互。通过Java代码处理相机拍照和相册选择的逻辑,然后通过JavaScript将图片数据传递回WebView进行展示,为用户提供更...

    android webview input=file 失效解决方案

    在Android开发中,Webview是一个重要的组件,它允许我们在原生应用中内嵌网页内容,提供混合式应用的用户体验。然而,在使用Webview时,有时会遇到一个问题:当HTML页面中包含`&lt;input type="file"&gt;`用于上传文件的...

    android中WebView回调js的方法

    在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中加载和显示网页内容。有时候,我们不仅需要在Android代码中调用JavaScript,还需要让JavaScript能够反过来调用Android的Java方法,这种交互被...

    android webview的用法总结

    在Android开发中,WebView是一个非常重要的组件,它允许开发者在应用程序中嵌入网页内容并实现与网页的交互。WebView基于WebKit内核,它的表现与Firefox类似,因此在开发时通常会在Firefox上进行预览和测试,以确保...

    Android WebView加载网页以及本地图片缓存问题

    总结,Android的WebView组件提供了丰富的功能,能够加载远程和本地资源,同时支持缓存机制,提高用户体验。开发者需要根据实际需求调整其配置和行为,以实现最佳的加载效果和性能。在处理图片资源时,特别要注意路径...

    Android中webview使用js与java交互

    总结起来,Android的WebView提供了一种灵活的方式让JavaScript和Java代码进行通信,这对于构建混合型应用或者在App中实现复杂交互功能非常有用。通过理解并熟练掌握JavaScript Interface的使用,开发者可以充分利用...

    android webview 加载网页 样例

    总结,Android WebView是构建混合应用或展示网页内容的强大工具。通过学习和理解上述知识点,你可以创建一个功能丰富的Web应用程序,并与网页内容进行深度交互。记得在实际开发中,还要关注性能优化和用户体验提升,...

    android 使用WebView浏览网页

    总结,WebView是Android开发中的重要工具,能够帮助我们构建混合型应用,结合本地和Web功能。理解并熟练使用WebView的相关设置、事件处理和JavaScript交互,对于提升Android应用的功能性和用户体验具有重要意义。

    Android-WebView:Android webview 源码。 (已过时,主要供参考)

    总结来说,尽管提供的资源可能过时,但我们仍然可以从中学到关于Android Webview的基本知识,包括如何使用WebView加载网页、与JavaScript交互,以及如何进行性能优化和安全设置。对源码的理解有助于我们在实际开发中...

    Android离线webview调试工具,开发H5混合应用必备

    总结来说,"Android离线webview调试工具"是专为解决国内开发者在使用`chrome://inspect`时遇到的网络问题而生的利器。它提供了离线调试、跨机型兼容、实时更新等多种实用功能,让H5混合应用的开发变得更加便捷高效。...

    Android 关于WebView一些注意点

    ### Android WebView 进度条相关知识点 #### 一、WebView简介 WebView是Android中的一个重要组件,它能够将网页内容嵌入到应用中显示。通过使用WebView,开发者可以在自己的应用程序里加载并显示HTML页面,这对于...

    Android_WebView安全攻防指南2020.pdf

    在Android应用程序开发中,WebView是不可或缺的一部分,它允许在应用内部加载和显示网页内容。然而,WebView也成为了安全问题的重灾区,因为它可能被攻击者利用来实施各种攻击。以下是一份详细的Android WebView安全...

    android webview 选择文件(拍照,本地相册) 百度定位自适应屏幕

    总结: 在Android Webview中实现文件选择,包括拍照和从相册选取图片,需要监听`WebChromeClient`并处理文件选择器的结果。同时,结合百度定位服务,可以提供实时的位置信息,使得应用更具交互性和实用性。最后,...

    Android WebView中调用html外部文件并监听操作(源码)

    总结一下,这个教程展示了如何在Android的WebView中加载HTML外部文件,并监听HTML中的操作。当用户点击电话链接时,我们的应用会响应并启动拨打电话的界面。通过这样的方式,我们可以利用WebView将HTML与Android原生...

    用原生webView开发的安卓壳子

    在Android应用开发中,"用原生webView...总结,用原生webView开发的安卓壳子是一种高效且灵活的方法,尤其适合快速构建基于网页的应用。但同时也需要注意性能优化、安全性和用户体验的提升,确保应用的稳定性和可靠性。

    android之webview与js相互调用

    在Android开发中,Webview是一个非常重要的组件,它允许我们加载和显示网页内容。Webview不仅能够呈现HTML、CSS和JavaScript,还支持与原生Android应用进行交互,从而实现更丰富的功能。本教程将深入探讨如何在...

Global site tag (gtag.js) - Google Analytics