phoneGap(Cordova)如何在内部工作,特定于iOS

时间:2012-10-12 10:52:21

标签: ios cordova cordova-2.0.0

我已经开始为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?以及调用如何支持较低层(本机代码层)

提前感谢一堆。

2 个答案:

答案 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:...然后用第二条消息获取结果,但我不确定。

Cordova Sources iOSExec

在那里学到很多东西。