浏览 37743 次
锁定老帖子 主题:WebView再探
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-29
最后修改:2009-04-29
从WebView初探
了解到WebView的强大,。听说WebView对Javascript的支持也很强,想从网上找些例子,还很难找,最终从google老家找了一个Java和Javascript互调的例子
,当时看了,下巴“咣当”就掉在地上了,太强了!这样也行? 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的目的。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-04-29
等你看了如何在WebView通过JS调用barcode扫描程序的话... 下巴就要掉N下了...
Android很好很强大 |
|
返回顶楼 | |
发表时间:2009-04-29
我惊讶的是WebView如此无缝地打通了Java和Javascript的调用。如果打通了这两者的关系,利用Java开启摄像头扫描barcode,再图像识别出barcode应该是常规的应用了,不会惊掉我的下巴地~~
|
|
返回顶楼 | |
发表时间:2009-04-30
用JS做bridge调用native functions其实在iPhone上也实现过了.
WindowsMobile上用Gears也可以多少调用一些功能, Camera的支持在开发中. |
|
返回顶楼 | |
发表时间:2009-05-14
Twidroid的作者说过他使用了Webview(因为性能上好过Listview)
应该就是这么实现的吧 |
|
返回顶楼 | |
发表时间:2009-05-14
kryptonum 写道 Twidroid的作者说过他使用了Webview(因为性能上好过Listview)
应该就是这么实现的吧 噢? 那要研究一下了, 有时候做layout做死人了... |
|
返回顶楼 | |
发表时间:2010-03-19
我正在尝试用在andriod上做报表出来。饼图,折线图,柱状图等等。
大体的想法就是webview封装html 5+ javascript。已经做出了饼图和折线图。不过使用的javascript是网上现成的绘图库。 这种方法的好处是javascript具有移植性。问题是我不确定性能上是不是可接受,再一个视觉感受上不是特别棒。正准备借一个手机试试。 |
|
返回顶楼 | |
发表时间:2010-03-26
javascript能调用java,这个一早就知道了,今天再仔细看看你的文章,突然发现还能java调javascript里面的函数,这个解决了我一个大问题。
|
|
返回顶楼 | |
发表时间:2010-04-07
最后修改:2010-04-07
那这样就可以在绑定的java里面定义多个方法,供js调用,这个确实强大啊
|
|
返回顶楼 | |