Phonegap 通信原理
下图为JavaScript调用本地代码的通信过程

Phonegap的核心API都是基于插件的,这些JavaScript API都会调用cordova.exec() 函数来完成操作。cordova.exec()函数如下
cordova.exec(success, fail, service, action, args);
其中success是操作成功后的回调函数
fail是操作失败后的回调函数
service是所要操作的本地服务名称
action是要执行的服务的具体操作
args是操作所需要的参数
在cordova.exec() 函数中,实现JavaScript到本地代码通信的关键代码为:
  exec: function(bridgeSecret, service, action, callbackId, argsJson) {
        return prompt(argsJson, 'gap:'+JSON.stringify([bridgeSecret, service, action, callbackId]));
    },
prompt函数本身为浏览器用来提示用户输入信息的。 但是实际上并没有,原因是浏览器做过处理。
在Android中,用到SystemWebChromeClient类,会覆盖WebChromeClient的onJsPrompt方法。这个函数就是用来处理JavaScrpt的prompt函数的请求
@Override
public boolean onJsPrompt(WebView view, String origin, String message, String defaultValue, final JsPromptResult result) {
// Unlike the @JavascriptInterface bridge, this method is always called on the UI thread.
String handledRet = parentEngine.bridge.promptOnJsPrompt(origin, message, defaultValue);
if (handledRet != null) {
result.confirm(handledRet);
} else {
dialogsHelper.showPrompt(message, defaultValue, new CordovaDialogsHelper.Result() {
@Override
public void gotResult(boolean success, String value) {
if (success) {
result.confirm(value);
} else {
result.cancel();
}
}
});
}
return true;
}
里面调用promptOnJsprompt方法
 public String promptOnJsPrompt(String origin, String message, String defaultValue) {
                String r = jsExec(bridgeSecret, service, action, callbackId, message);
                ...
    }
在jsExec里调用
pluginManager.exec(service, action, callbackId, arguments);
至此Js到本地通信完成
参考
Phonegap 通信原理的更多相关文章
- (转)PhoneGap工作原理及需改进的地方
		原文:http://mobile.51cto.com/web-330900.htm PhoneGap工作原理及需改进的地方 2012-04-18 16:42 佚名 网络整理 字号:T | T 目前开发 ... 
- reactnative 原生组件通信原理
		http://www.csdn.net/article/2015-11-27/2826345-compare-React-Native-with-ExMobi 原生组件通信原理 React Nativ ... 
- jsbridge 原理 & 通信原理
		jsbridge 原理 & 通信原理 Hybrid 方案是基于 WebView 的,JavaScript 执行在 WebView 的 Webkit 引擎中; 因此,Hybrid 方案中 JSB ... 
- 基于web的IM软件通信原理分析
		关于IM(InstantMessaging)即时通信类软件(如微信,QQ),大多数都是桌面应用程序或者native应用较为流行,而网上关于原生IM或桌面IM软件类的通信原理介绍也较多,此处不再赘述.而 ... 
- Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
		转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ... 
- SSL 通信原理及Tomcat SSL 配置
		SSL 通信原理及Tomcat SSL 双向配置 目录1 参考资料 .................................................................. ... 
- Java 下 SSL 通信原理及实例
		有关SSL的原理和介绍在网上已经有不少,对于Java下使用keytool生成证书,配置SSL通信的教程也非常多.但如果我们不能够亲自动手做一个SSL Sever和SSL Client,可能就永远也不能 ... 
- AIDL通信原理
		AIDL (Android Interface Definition Language),通过定义通信接口来实现进程间通信.这是Google提供的一种在安卓应用进程间通信的工具.所以要了解AIDL的通 ... 
- Java基础知识强化之网络编程笔记02:Socket通信原理图解
		1. Socket (1)Socket套接字 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字 (2)Socket原理机制: • 通信两端都有Socket. • 网 ... 
随机推荐
- Python笔记 #16# Pandas: Operations
			10 Minutes to pandas #Stats # shift 这玩意儿有啥用??? s = pd.Series([1,5,np.nan], index=dates).shift(0) # s ... 
- bzoj1613 / P1353 [USACO08JAN]跑步Running
			P1353 [USACO08JAN]跑步Running 显然的dp 设$f[i][j]$表示进行到第$i$分钟时,$j$疲劳度下的最远距离,$d[i]$为第$i$分钟下能跑的距离 分类讨论 1.运动: ... 
- WinterCamp2017 游记
			Winter is coming! Day0 Day0前一天打了一轮CF,做完了ABCD,Div2 Rank59.然后就去开开心心的睡觉,准备第二天的行程. 快到一点的时候躺在了床上,睡不着,翻来覆去 ... 
- 20145219《网络对抗》PC平台逆向破解
			20145219<网络对抗>PC平台逆向破解 shellcode注入 1.shellcode shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 2.构造方法 (1) ... 
- Object.getOwnPropertyNames和Object.keys
			返回对象自己(非原型继承的属性)的属性名称,包括函数. 方法: Object.getOwnPropertyNames(object); Object.keys(object); 参数: object, ... 
- Nginx负载均衡之健康检查
			负载均衡实例 http{ upstream myserver { server 10.10.10.1 weight=3 max_fails=3 fail_timeout=20s; server 10. ... 
- Linux 用户和组的 添加/删除
			1.建用户:adduser phpq //新建phpq用户passwd phpq //给phpq用户设置密码 2.建工作组groupadd test //新建test工作组 3.新建用户同时增加工作组 ... 
- Codeforces Round #394 (Div. 2) A,B,C,D,E
			A. Dasha and Stairs time limit per test 2 seconds memory limit per test 256 megabytes input standard ... 
- CSS 再学习,文本处理
			文本缩进(对p,div有效:对span无效) p {text-indent: 5em;} Tips:一般来说,可以为所有块级元素应用 text-indent,但无法将该属性应用于行内元素(span), ... 
- Nginx 正则匹配
			目录 Nginx 正则表达式之匹配操作符 过期缓存 针对浏览器 针对文件类型 针对文件夹 判断文件,文件夹 设置某些类型文件的浏览器缓存时间 匹配到所有uri 全局变量 常用正则 Nginx 正则表达 ... 
