phonegap使用的java与js互相调用的原理。phonegap实现的模型刚也说了,有同步和异步两种。js实现的api,所以是js先会调用java代码,然后再返回给js。对于同步的而言,就是js调用java,然后java返回一个结果作为返回值。对于异步的而言,可能js掉了很多java代码,但是立即返回,然后java代码执行结束后再回调js代码,这里就涉及到js调java,然后java再调用js。
对于js调用java:
js调用java的入口是通过在js中调用prompt方法,这很奇怪吧,这个方法本来是让浏览器弹出个输入框的。我当初找了好久也没发现phonegap到底怎么搞得的让js调用java的代码,后来看到一会觉得该是这个方法,但是这是一个浏览器的客户端自己的东西,而且怪异的是浏览器并没有弹出输入框,后来终于发现。
在DroidGap.java中有个hack,重载了WebviewClient的onJsPrompt方法,然后执行了自己的逻辑。 也就是js调用prompt的时候,java端浏览器代码接受到这个,然后在响应的处理函数中根据传过来的参数,实现了一些特别的逻辑。可以从这个方法的注释上看出一二。
private LinkedList javascript;
服务器保存要回调的js的代码,供js客户端取回,这里java端是服务器端,js端是客户端,服务器端不可能请求客户端做啥,是b/s模型,所以phonegap实现了两种服务模型,一种是轮询,一种是XHR异步回调,也就是Ajax的模型。src/com/phonegap/CallbackServer.java是回调服务器的代码所在处。从类的注释中可以看到。
This class provides a way for Java to run JavaScript in the web page that has loaded PhoneGap. The CallbackServer class implements an XHR server and a polling server with a list of JavaScript statements that are to be executed on the web page.
CallbackServer提供的这两种模型,一种是XHR,一种是轮询,轮询很简单了,callbackserver服务器端,有一个保存回调js的列表,前面所说,然后每隔一段时间客户端的js会询问一次服务器,是否有需要回调的js,如果有则调用,然后每隔一段时再查询一次服务器。而基于XHR的,其实这个就是ajax用的机制了,js发起一个异步请求,然后服务器会在返回数据之前保持住这个连接,当返回数据就位后,服务器给请求客户端返回数据,然后关闭连接。然后客户端接受并且处理。
刚说了服务器端的代码实现,现在来看一下客户端js的相关代码。
PhoneGap.JSCallback = function() { ... xmlhttp.open("GET", "http://127.0.0.1:"+PhoneGap.JSCallbackPort+"/"+PhoneGap.JSCallbackToken , true); xmlhttp.send(); }
这个是XHR模型的代码,客户端js使用xhr请求服务器来获取js代码,进行回调。
PhoneGap.JSCallbackPolling = function() { ... var msg = prompt("", "gap_poll:"); if (msg) { setTimeout(function() { try { var t = eval_r(""+msg); } catch (e) { console.log("JSCallbackPolling: Message from Server: " + msg); console.log("JSCallbackPolling Error: "+e); } }, 1); setTimeout(PhoneGap.JSCallbackPolling, 1); } else { setTimeout(PhoneGap.JSCallbackPolling, PhoneGap.JSCallbackPollingPeriod); } }
这个是轮询方式的,可以看到客户端每隔PhoneGap.JSCallbackPollingPeriod段时间,就请求一次服务器(通过prompt("", "gap_poll:");)。
相关推荐
一个Android原生activity与phonegap交互的例子, java调用js,js调用java 工程中是一个嵌套了phonegap的activity ,外层是android的activity,内层framelayout中是phonegap,完成了交互的简单例子
cordova 3.5 , phonegap用 js调用本地java 是通过自定义插件来实现的。由问题,具体步骤可以参考我的博文
phoneGap与android的activity交互例子,互相调用函数,js,java的交互.zip
PhoneGap将移动设备本身提供的复杂的API进行了抽象和简化,提供了一系列丰富的API供开发者调用,只要你会HTML和Javascript或者Java语言,就可以利用PhoneGap提供的API去调用各种功能,PhoneGap就能让你可以制作出在...
PhoneGap将移动设备本身提供的复杂的API进行了抽象和简化,提供了一系列丰富的API供开发者调用,只要你会HTML和Javascript或者Java语言,就可以利用PhoneGap提供的API去调用各种功能,PhoneGap就能让你可以制作出在...
PhoneGap Android插件 调用toast 和 notification 里面是 java js 源码和配置文件. 使用方式和其他phonegap插件一致
PhoneGap将移动设备本身提供的复杂的API进行了抽象和简化,提供了一系列丰富的API供开发者调用,只要你会HTML和Javascript或者Java语言,就可以利用PhoneGap提供的API去调用各种功能,PhoneGap就能让你可以制作出在...
Js通过PhoneGap调用Java方法并互相传参的。 一、JAVA代码 写一个类,该类继承自Plugin并重写execute方法。 import org.json.JSONArray; import android.app.Activity; import android.app.AlertDialog; import ...
默认的 Phonegap (Cordova) 相机插件调用本机相机,这使得 Android Garbage Collector 杀死后台应用程序。 此插件可避免您的应用程序进入后台并被其他应用程序的垃圾收集器杀死。 我们使用了Phonegap源代码并对其...
默认的 Phonegap (Cordova) Gallery Plugin 调用本地照片库,这使得 Android Garbage Collector 杀死后台应用程序。 此插件可避免您的应用程序进入后台并被其他应用程序的垃圾收集器杀死。 我们使用了Phonegap源...
安卓java获取webview源码 注意:截至 2016 年,所有现代 Web 视图都内置了良好的 WebGL 支持,因此这不再有用。 这被认为是 2011 年的疯狂黑客攻击。 WebGLGap - 在 PhoneGap 中启用 WebGL 关于 目前,HTML5 游戏在...
本课程从WebView谈起,说明WebView执行HTML5/JS代码时,如何调用 Java插件的代码。先帮你复习这些基本技术,然后带领你进入一个高价值的架构设计,就是:如果您想开发自己的小框架,而且想把它融入到Android的大框架...
cordova(ionic / phonegap)插件:“ js调用原生” 用法 该插件公开以下方法: cordova . plugins . jsCallNative . run ( success , error ) ; you should define a function called "sayHi()" in the "index....
java8 ...this,拼写纠错,地理位置检索,分页显示结果,自己写的算法为基于汉语的拼写建议,二维码本地生成,调用外部借口为百度地图js段,百度地图ip转经纬度接口,flickr的java接口的图片检索,具
自定义URL方案PhoneGap插件 通过这样的链接启动您的应用程序: mycoolapp:// 适用于iOS和Android的 此仓库适用于PhoneGap 3.0.0及更高版本 对于PhoneGap 2.9.0及更低版本,请 ...与iOS不同,无法使用config.xml为您
Phonegap 3.0.0 插件使用REST API 进行推送需要安装 id,在 JS 中不可用该插件向 JS 公开了四个原生 Android API 推送服务:安装选择以下两个命令之一: phonegap local plugin add ... 在此运行后,您可能希望将安装 ...
使用REST API 进行推送需要安装 id,在 JS 中不可用 该插件向 JS 公开了四个原生 Android API 推送服务: 安装 选择以下两个命令之一: phonegap local plugin add ...
Chrome Frame 会把最新版的Chrome Webkit 内核和JavaScript 引擎注入到IE中, IE浏览器将获得Chrome的性能和功能 目录 摘要 I ABSTRACT II 专业名词清单 III 第一章 绪论 1 1.1 研究背景与意义 1 1.2国内外相关...
取决于设备的功能,因此您可以使用 API 调用对其进行测试。 与兼容。 在等待审核。2. 安装自动(CLI / Plugman) 手电筒与兼容,与兼容,以下是它与 CLI 的工作方式: $ cordova plugin add ...
Android与js交互.rar Android中监听电话状态.rar Android之Wifi学习教程.rar Android之用PopupWindow实现弹出菜单.rar android在wifi下手机与电脑的socket通信.rar android多线程断点下载.rar Android手机一键Root...