首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

Android的Webview中,javascript怎么调用java方法

2012-06-22 
Android的Webview中,javascript如何调用java方法PS:另外推荐下面这篇文章《用注解和pojo支撑起来的轻量级RE

Android的Webview中,javascript如何调用java方法

PS:另外推荐下面这篇文章《用注解和pojo支撑起来的轻量级REST框架--T2

http://blog.csdn.net/nanjingjiangbiao/article/details/7680702

 

今天调查一个线上Bug,发现是WebView中的一小段javascript,会直接调用到后台APK的一个Java事件,最后导致java中nullpointexception。

感兴趣的是,WebView中的javascript如何调用APK中的java方法。

 

一个例子:

        通过JS取得Android的GPS数据

 

第一步,WebKit的准备

首先,给与WebKit的javascript的执行许可

 


然后,塞入自己的javascript拦截器


第二步,定义自己的javascript拦截器

 


第三步,定义一个可运行的html

在这个代码里面,可以用roid.gps的方法调用第二步定义的java函数

 

最后,全部的代码


未完

我还想知道为什么,在webview里面定义一个JSObject,就可以连接javascript和后台函数

他们之间是如何通信的?

 我稍微调查了一下WebView的底层代码,webview初期化的时候


生成了显示用对象

Transfer all messages to the newly created webcore thread handler.  private void  [More ...] transferMessages() {      mTid = Process.myTid();      mSavedPriority = Process.getThreadPriority(mTid);      mHandler = new Handler() {          @Override          public void  [More ...] handleMessage(Message msg) {              if (DebugFlags.WEB_VIEW_CORE) {                  Log.v(LOGTAG, (msg.what < REQUEST_LABEL                          || msg.what                          > VALID_NODE_BOUNDS ? Integer.toString(msg.what)                          : HandlerDebugString[msg.what                                  - REQUEST_LABEL])                          + " arg1=" + msg.arg1 + " arg2=" + msg.arg2                          + " obj=" + msg.obj);              }              switch (msg.what) {                  case WEBKIT_DRAW:                      webkitDraw();


所以你要问我他们是怎么通信的

我只能说是线程间通信。

 

#以上#


 

1楼xiaofufu113小时前
谢谢分享。

热点排行