我已经开始为mutliple平台开发html应用程序。我最近听说过Cordova 2.0(PhoneGap),因为我很想知道这座桥是如何工作的。
经过大量的代码遍历后,我看到Exec.js是JS - > Native调用的代码
execXhr = execXhr || new XMLHttpRequest();
// Changeing this to a GET will make the XHR reach the URIProtocol on 4.2.
// For some reason it still doesn't work though...
execXhr.open('HEAD', "file:///!gap_exec", true);
execXhr.setRequestHeader('vc', cordova.iOSVCAddr);
if (shouldBundleCommandJson()) {
execXhr.setRequestHeader('cmds', nativecomm());
}
execXhr.send(null);
} else {
execIframe = execIframe || createExecIframe();
execIframe.src = "gap://ready";
但是想要了解它是如何工作的,这里的概念是什么,file:///!gap_exec或gap:// ready do what?以及调用如何支持较低层(本机代码层)
提前感谢一堆。
诀窍很简单:
有一个webview。这会显示您的应用。 webview将处理所有导航事件。
如果浏览器导航到:
file:///!gap_exec
要么
gap://
webview将取消导航。这些字符串后面的所有内容都被重新用作标识符,以获取具体的插件/插件方法和参数:
伪url示例:
gap://echoplugin/echothistext?Hello World
这将导致phonegap寻找 echoplugin
然后打电话给 echothistext
发送文本的方法 "Hello World"
到(本机)插件。
更新
从本机到javascript的方式是(或可能是)加载a javascript:
url进入webview。
具体实现有点复杂,因为javascript必须向本机代码发送回调id。可能会有多个本机呼叫同时运行。但实际上这根本不是魔术。只是一个数字,以获得正确的javascript回调正确的JSON。
平台和javascript之间有不同的通信方式。对于Android,有三到四个不同的桥梁。
诀窍很简单:
有一个webview。这会显示您的应用。 webview将处理所有导航事件。
如果浏览器导航到:
file:///!gap_exec
要么
gap://
webview将取消导航。这些字符串后面的所有内容都被重新用作标识符,以获取具体的插件/插件方法和参数:
伪url示例:
gap://echoplugin/echothistext?Hello World
这将导致phonegap寻找 echoplugin
然后打电话给 echothistext
发送文本的方法 "Hello World"
到(本机)插件。
更新
从本机到javascript的方式是(或可能是)加载a javascript:
url进入webview。
具体实现有点复杂,因为javascript必须向本机代码发送回调id。可能会有多个本机呼叫同时运行。但实际上这根本不是魔术。只是一个数字,以获得正确的javascript回调正确的JSON。
平台和javascript之间有不同的通信方式。对于Android,有三到四个不同的桥梁。
我也试图更详细地解决这个问题。基本上iOS上有2种方法可以帮助...
从消息来源看,cordova使用webView发送“READY”消息:shouldStartLoadWithRequest:...然后用第二条消息获取结果,但我不确定。
Cordova来源iOSExec
那里有很多值得学习的地方。