论坛首页 移动开发技术论坛

WebView再探

浏览 37704 次
锁定老帖子 主题:WebView再探
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-04-29   最后修改:2009-04-29

WebView初探 了解到WebView的强大,。听说WebView对Javascript的支持也很强,想从网上找些例子,还很难找,最终从google老家找了一个Java和Javascript互调的例子 ,当时看了,下巴“咣当”就掉在地上了,太强了!这样也行?
整个Eclipse ADT工程例子中都有,这里重点分析一下代码:

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,作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过javascript:window.demo访问到绑定的java对象了。来看看在html中是怎样调用的:

<html>
        <script language="javascript">
                function wave() {
                    document.getElementById("droid").src="android_waving.png";
                }
        </script>
        <body>
            <a onClick="window.demo.clickOnAndroid()">
                                <img id="droid" 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的目的。

   发表时间:2009-04-29  
等你看了如何在WebView通过JS调用barcode扫描程序的话... 下巴就要掉N下了...

Android很好很强大
0 请登录后投票
   发表时间:2009-04-29  
我惊讶的是WebView如此无缝地打通了Java和Javascript的调用。如果打通了这两者的关系,利用Java开启摄像头扫描barcode,再图像识别出barcode应该是常规的应用了,不会惊掉我的下巴地~~
0 请登录后投票
   发表时间:2009-04-30  
用JS做bridge调用native functions其实在iPhone上也实现过了.
WindowsMobile上用Gears也可以多少调用一些功能, Camera的支持在开发中.
0 请登录后投票
   发表时间:2009-05-14  
Twidroid的作者说过他使用了Webview(因为性能上好过Listview)
应该就是这么实现的吧
0 请登录后投票
   发表时间:2009-05-14  
kryptonum 写道
Twidroid的作者说过他使用了Webview(因为性能上好过Listview)
应该就是这么实现的吧

噢?  那要研究一下了, 有时候做layout做死人了...
0 请登录后投票
   发表时间:2010-03-19  
我正在尝试用在andriod上做报表出来。饼图,折线图,柱状图等等。

大体的想法就是webview封装html 5+ javascript。已经做出了饼图和折线图。不过使用的javascript是网上现成的绘图库。

这种方法的好处是javascript具有移植性。问题是我不确定性能上是不是可接受,再一个视觉感受上不是特别棒。正准备借一个手机试试。
0 请登录后投票
   发表时间:2010-03-26  
javascript能调用java,这个一早就知道了,今天再仔细看看你的文章,突然发现还能java调javascript里面的函数,这个解决了我一个大问题。
0 请登录后投票
   发表时间:2010-04-07   最后修改:2010-04-07
那这样就可以在绑定的java里面定义多个方法,供js调用,这个确实强大啊
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics