`
iame
  • 浏览: 130420 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

WebView再探

阅读更多

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的目的。

分享到:
评论
8 楼 wjb_forward 2010-04-07  
那这样就可以在绑定的java里面定义多个方法,供js调用,这个确实强大啊
7 楼 kitcheng 2010-03-26  
javascript能调用java,这个一早就知道了,今天再仔细看看你的文章,突然发现还能java调javascript里面的函数,这个解决了我一个大问题。
6 楼 yafeng 2010-03-19  
我正在尝试用在andriod上做报表出来。饼图,折线图,柱状图等等。

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

这种方法的好处是javascript具有移植性。问题是我不确定性能上是不是可接受,再一个视觉感受上不是特别棒。正准备借一个手机试试。
5 楼 lordhong 2009-05-14  
kryptonum 写道
Twidroid的作者说过他使用了Webview(因为性能上好过Listview)
应该就是这么实现的吧

噢?  那要研究一下了, 有时候做layout做死人了...
4 楼 kryptonum 2009-05-14  
Twidroid的作者说过他使用了Webview(因为性能上好过Listview)
应该就是这么实现的吧
3 楼 lordhong 2009-04-30  
用JS做bridge调用native functions其实在iPhone上也实现过了.
WindowsMobile上用Gears也可以多少调用一些功能, Camera的支持在开发中.
2 楼 iame 2009-04-29  
我惊讶的是WebView如此无缝地打通了Java和Javascript的调用。如果打通了这两者的关系,利用Java开启摄像头扫描barcode,再图像识别出barcode应该是常规的应用了,不会惊掉我的下巴地~~
1 楼 lordhong 2009-04-29  
等你看了如何在WebView通过JS调用barcode扫描程序的话... 下巴就要掉N下了...

Android很好很强大

相关推荐

    Android webview 内存泄露的解决方法

    Android webview 内存泄露的解决方法 最近在activity嵌套webview显示大量图文发现APP内存一直在涨,没法释放内存,查了很多资料,大概是webview的一个BUG,引用了activity导致内存泄漏,所以就尝试传递...

    uniapp 使用webView通讯

    uniapp 使用webView通讯

    android WebView预加载

    但如果跳转之后再加载,会看到webview有一个加载的过程,如果网页较大可能加载起来会很慢。这时我们利用启动页或引导页或中间的广告页的时间来预加载webview,利用View.gone,View.visible来实现控件类的隐藏与显示,...

    webView谷歌离线调试包

    调试基于WebView的App最舒服的工具Chrome自带的开发者工具,其中有我们熟悉的Dom树调试,JS调试,Network监视等等功能。 Google提供的调试Android上WebView的步骤: 1.开启手机上的USB调试功能并且连接计算机手机端...

    Android WebView 去除标题

    Android WebView 去除标题 利用javacript交互

    WebView2-20200512- WebView2Loader.dll.zip

    WebView2Loader.dll 包含 x86 x64 Rad Studio 使用

    Android_WebView实例详解

    Android WebView 实例详解 Android WebView 是 Android 平台中一种特殊的组件,可以在应用程序中显示 web 页面。它基于 WebKit 内核浏览器,提供了一个可以在 Android 应用程序中嵌入网页浏览器的解决方案。 一、...

    com.google.android.webview.apk

    有些平板缺失加载webview所依赖的内核apk的资源文件,会导致应用加载webview报错。需要自己安装webview的apk。 webview全称叫做Android System WebView,它是Android生态系统的重要组成部分,也是Chrome浏览器的...

    android webview 版本69.0

    这是AOSP的webview,包名com.android.webview,不是google的webview

    实例详解Android Webview拦截ajax请求

    Android Webview虽然提供了页面加载及资源请求的钩子,但是对于h5的ajax请求并没有提供干涉的接口,这意味着我们不能在webview中干涉javascript发起的http请求,而有时候我们确实需要能够截获ajax请求并实现一些功能...

    webview_浏览器_qt浏览器_QT_WebView_

    QT webview浏览器相关开发,简单webview应用开发

    Android Webview滑动监听

    Android Webview 滑动监听 放大缩小查看网页图片

    Android System Webview 90.0.4430.82

    带google包名的可以下载 google system webview覆盖安装,可以略过 此文件包含 arm和arm64的webview这是AOSP Webview, 包名com.android.webview, 不带google的 带google包名的可以下载 google system webview覆盖...

    webview显示图片并下载

    webview显示图片并下载

    Android WebView获取源码

    Android使用WebView获取网页的源码,将WebView封装进ArthurWebView,直接创建并初始化即可使用!

    crosswalk-webview比webview更好用

    crosswalk-webview 比android原生的webview更好用速度更快,支持富文本显示,能够更好的支持富文本网页

    解决webview 第二次调用loadUrl页面不刷新的问题

    以下方法可以成功! @Override public void onClick(View view) { webview.loadUrl(url); webview.loadUrl( [removed][removed].reload( true ) );...webView.setWebViewClient(new WebViewCli

    Android实现WebView懒加载

    Android实现WebView懒加载,提前进行页面JS资源加载。减少WebView加载时间及加载资源问题。Android 8.0以前需要引入X5内核,Android 8.0以后无特殊要求。

    WebView 向 Activity 跳转

    WebView 向 Activity 跳转 通过 addJavascriptInterface 的实现

    WebView加载失败错误处理

    webview加载失败,自定义错误页面处理

Global site tag (gtag.js) - Google Analytics