我已经开始为多个平台开发html应用程序.我最近听说过Cordova 2.0(PhoneGap),自从我很好奇地知道桥梁是如何工作的. 经过很多代码行走,我看到了Exec.js是来自JS的调用代码 – 本机发生 execXh
经过很多代码行走,我看到了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?而呼叫如何支持下层(本机代码层)
感谢一大堆提前.
诀窍很简单:有一个webview.这将显示您的应用程序. webview将处理所有导航事件.
如果浏览器导航到:
file:///!gap_exec
要么
gap://
webview将取消导航.这些字符串后面的所有内容都被重新用作标识符,以获取具体的plugin / plugin-method和参数:
伪网址示例:
gap://echoplugin/echothistext?Hello World
这将导致phonegap寻找一个echoplugin并调用echothistext方法发送文本“Hello World”到(native)插件.
更新
从本机到javascript的方式(或者可能是)将JavaScript:url加载到webview中.
具体的实现有点复杂,因为javascript必须将回调id发送到本地代码.在同一时间可能有多个本机呼叫正在运行.但事实上这根本就不是魔术.只需要一个数字来获得正确的JSON到正确的javascript回调.
平台和javascript之间有不同的沟通方式.对于Android,有三四个不同的桥梁.