我已经开始为mutliple平台开发html应用程序。我最近听说过Cordova 2.0(PhoneGap),因为我一直很想知道这座桥是如何工作的。 经过大量代码遍历后,我看到Exec.js是JS调用的代码 - >本地发生
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?以及调用如何支持较低层(本机代码层)
提前感谢一堆。
答案 0 :(得分:12)
诀窍很简单:
有一个webview。这会显示您的应用。 webview将处理所有导航事件。
如果浏览器导航到:
file:///!gap_exec
或
gap://
webview将取消导航。这些字符串后面的所有内容都被重新用作标识符,以获取具体的插件/插件方法和参数:
伪网址示例:
gap://echoplugin/echothistext?Hello World
这将导致phonegap查找echoplugin
并调用echothistext
方法将文本"Hello World"
发送到(本机)插件。
<强>更新强>
从原生到javascript的方式是(或可能是)将javascript:
网址加载到网页浏览中。
具体实现有点复杂,因为javascript必须向本机代码发送回调id。可能会有多个本机呼叫同时运行。但实际上这根本不是魔术。只是一个数字,可以将正确的JSON提供给正确的javascript-callback。
平台和javascript之间有不同的通信方式。对于Android,有三到四个不同的桥梁。
答案 1 :(得分:4)
我也试图更详细地说明这一点。基本上iOS上有2种方法可以帮助......
从消息来源看,cordova使用webView发送“READY”消息:shouldStartLoadWithRequest:...然后用第二条消息获取结果,但我不确定。
在那里学到很多东西。