福建网站制作,海口网站建设fwlit,免费发布便民信息平台,wordpress网站百度数据本文转自#xff1a;http://hi.baidu.com/relayon/blog/item/92b15463677d3e6b0d33fa79.html 在移动互联网的争夺日趋白热化#xff0c;各个互联网巨头纷纷推出自己的手机浏览器#xff0c;浏览器市场的争夺从桌面转移到了手机。在Android手机中内置了一款高性能webkit内核浏…本文转自http://hi.baidu.com/relayon/blog/item/92b15463677d3e6b0d33fa79.html 在移动互联网的争夺日趋白热化各个互联网巨头纷纷推出自己的手机浏览器浏览器市场的争夺从桌面转移到了手机。在Android手机中内置了一款高性能webkit内核浏览器在SDK中封装为一个叫做WebView组件。什么是webkitWebKit是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对象。[code]mWebView.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } });[/code]4.如果不做任何处理浏览网页点击系统“Back”键整个Browser会调用finish()而结束自身如果希望浏览的网页回退而不是推出浏览器需要在当前Activity中处理并消费掉该Back事件。[code]public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode KeyEvent.KEYCODE_BACK) mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); } [/code]下一步让我们来了解一下android中webview是如何支持javascripte自定义对象的在w3c标准中js有windowhistorydocument等标准对象同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理这样使用js就可以为所欲为了。看一个实例[code]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); } } [/code]我们看addJavascriptInterface(Object obj,String interfaceName)这个方法该方法将一个java对象绑定到一个javascript对象中javascript对象名就是 interfaceNamedemo作用域是Global。这样初始化webview后在webview加载的页面中就可以直接通过 javascript:window.demo访问到绑定的java对象了。来看看在html中是怎样调用的。[code]html script languagejavascript function wave() { document.getElementById(droid).srcandroid_waving.png; } /script body a onClickwindow.demo.clickOnAndroid() img iddroid srcandroid_normal.png/br Click me! /a /body /html [/code]这样在javascript中就可以调用java对象的clickOnAndroid()方法了同样我们可以在此对象中定义很多方法比如发短信调用联系人列表等手机系统功能。,这里wave()方法是java中调用javascript的例子。这里还有几个知识点1)为了让WebView从apk文件中加载assetsAndroid SDK提供了一个schema前缀为file:///android_asset/。WebView遇到这样的schema就去当前包中的assets目录中找内容。如上面的file:///android_asset/demo.html2)addJavascriptInterface方法中要绑定的Java对象及方法要运行另外的线程中不能运行在构造他的线程中这也是使用Handler的目的。