Estaba buscando a través de las fuentes Phonegap para Android, y tratando de verificar que su método notification.alert()
simplemente delega en la función nativa JavaScript alert()
. Su código hace:Phonegap y prompt()
Notification.prototype.alert = function(message, completeCallback, title, buttonLabel) {
var _title = (title || "Alert");
var _buttonLabel = (buttonLabel || "OK");
PhoneGap.exec(completeCallback, null, "Notification", "alert", [message,_title,_buttonLabel]);
};
que se parece a mí como "alerta" se interpretará como el nombre de la función que se invocará en exec()
, pero exec()
está haciendo:
PhoneGap.exec = function(success, fail, service, action, args) {
try {
var callbackId = service + PhoneGap.callbackId++;
if (success || fail) {
PhoneGap.callbacks[callbackId] = {success:success, fail:fail};
}
//using: ["Notification", "alert", callbackId, true]
var r = prompt(PhoneGap.stringify(args),
"gap:"+PhoneGap.stringify([service, action, callbackId, true]));
//...
} catch (e2) {
console.log("Error: "+e2);
}
};
Ahora PhoneGap.stringify()
simplemente resuelve JSON.stringify()
, por lo que el código Phonegap está ejecutando el método notification.alert()
API llamando a la función prompt()
con dos objetos/matrices JSON. Mi suposición es que prompt()
es native JavaScript prompt() function (no he encontrado nada en su código JavaScript que invalide esta función). Si ese es el caso, entonces, ¿cómo está funcionando este código?
hacen uso similar de prompt()
en varios otros lugares, así:
PhoneGap.JSCallbackPort = prompt("getPort", "gap_callbackServer:");
¿Hay algo especial acerca de la forma en que están llamando prompt()
(en concreto mediante la inclusión de un segundo parámetro de la forma gap.*:.*
) que es permitiendo algún comportamiento personalizado? ¿O han anulado de alguna manera el comportamiento predeterminado de la función prompt()
en algún lugar externo a su código JavaScript?
Tenga en cuenta que esto se aplica específicamente a la versión Android de Phonegap, ya que otras versiones parecen usar mecanismos ligeramente diferentes para ejecutar las llamadas API.
El prompt devuelve una cadena. ¿Qué está mal? – xdazz
Lo que está mal es que la versión estándar de 'prompt()' muestra un diálogo para el usuario. Sin embargo, eso no es lo que está sucediendo aquí. No se muestra ningún diálogo como resultado de estas llamadas 'prompt()', sino que se invoca otra parte de la API de Phonegap. En esencia, están usando 'prompt()' como su punto de entrada principal de API, y me gustaría saber cómo/por qué. – aroth