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