phonegap是web app 下调用移动OS原生API的库。在整个压缩包结构中主要分三块:

1、cordova.js,前端的js库;功能是提供js的API接口,最终调用的是promp方法,如下:

/**
* Implements the API of ExposedJsApi.java, but uses prompt() to communicate.
* This is used only on the 2.3 simulator, where addJavascriptInterface() is broken.
*/ module.exports = {
exec: function(service, action, callbackId, argsJson) {
return prompt(argsJson, 'gap:'+JSON.stringify([service, action, callbackId]));
},
setNativeToJsBridgeMode: function(value) {
prompt(value, 'gap_bridge_mode:');
},
retrieveJsMessages: function() {
return prompt('', 'gap_poll:');
}
};

2、cordova jar包

以android下为例,基本原理是通过重写webview下的onJsConfirm接口,如下:

public class CordovaChromeClient extends WebChromeClient
  public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result)
{
boolean reqOk = false;
if ((url.startsWith("file://")) || (Config.isUrlWhiteListed(url))) {
reqOk = true;
} if ((reqOk) && (defaultValue != null) && (defaultValue.length() > ) && (defaultValue.substring(, ).equals("gap:")))
{
try {
JSONArray array = new JSONArray(defaultValue.substring());
String service = array.getString();
String action = array.getString();
String callbackId = array.getString();
String r = this.appView.exposedJsApi.exec(service, action, callbackId, message);
result.confirm(r == null ? "" : r);
} catch (JSONException e) {
e.printStackTrace();
return false;
} }
通过exposedJsApi对象,以类似MML的设计模式,将前端不同的JS脚本转换成action,通过对应plugin处理。
3、config.xml 配置文件
用以配置需要用的插件,比如摄像头、文件、事件等等。

最新文章

  1. Spring Boot启动流程详解(一)
  2. myeclipse2014 svn插件添加
  3. C# 使用IEnumerable,yield 返回结果,同时使用foreach时,在循环内修改变量的值无效(二)
  4. CRC编码
  5. CSS常用标签
  6. Genymotion加速下载虚拟镜像速度慢失败Connection timeout
  7. golang使用interface来mock进行测试(来自dotGO2014)
  8. yield学习续:yield return迭代块在Unity3D中的应用——协程
  9. Linux启动ftp服务器530 Permission denied解决方法(已试,行)
  10. ARP侦查工具Netdiscover
  11. MetaWeblog 同时管理51cto,csdn,sina,163,oschina,cnblogs等博客
  12. ofbiz进击 第二节。 control 理解与创建
  13. python logging 日志轮转文件不删除问题
  14. ASP.NET MVC轻教程 Step By Step 12——客户端验证
  15. FUSE
  16. Flutter获取点击元素的位置与大小
  17. JSONP原理实现及url传递参数封装
  18. 剑指offer例题——二进制中1的个数
  19. 【转帖】2018年Windows漏洞年度盘点
  20. Math.ceil()、Math.floor()和Math.round()

热门文章

  1. [Linux] mail 命令,进入邮箱及删除邮件
  2. eyegaze
  3. RTMP协议中文翻译(首发)(转)
  4. mysql 中文乱码解决方法
  5. [13]APUE:KQUEUE / FreeBSD
  6. net 调用https接口
  7. block的解析
  8. ARC模式下的内存泄露问题
  9. 【线段树套平衡树】【pb_ds】bzoj3196 Tyvj 1730 二逼平衡树
  10. 如何解决WebService参数传递中文乱码问题