Android--WebView组件

来源:互联网 发布:整人锁屏软件 编辑:程序博客网 时间:2024/06/06 03:21
WebView组件
Overview
在Android手机中内置了一款共性能的webkit内核浏览器,在SDK中封装为一个叫做WebView组件


Notice:
1.AndroidManifest.xml中必须使用许可“android.permission.INTERNET”否则出现Web page not available 错误。
2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。
For Example:
webview.getSetting().setJavaScriptEnabled(true);
3.如果页面中有连接,如果希望点击连接继续在当前Browser中相应,而不是新开Android系统中的Browser中响应链接,必须覆盖webview的WebViewClient对象。

For Example:

mWebView.setWebViewClient( new WebViewClient(){public boolean shouldOverrideUrlLoading(WebView view , String url){view.loadUrl(url);return true;}});


4.如果不做任何处理,浏览网页,点击系统的“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览网页回退而不是退出浏览器,需要在当前Activity中处理并且消除Back事件。
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就可以 为所欲为了。
For Example
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中是怎样调用的。
For Example
<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的目的。
原创粉丝点击