Stavo cercando tra le origini Phonegap per Android e cercando di verificare che il loro metodo notification.alert()
delegasse semplicemente alla funzione nativa di JavaScript alert()
. Il loro codice fa:Phoneegap e 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]);
};
Il che mi sembra "alert" viene interpretato come il nome della funzione per richiamare in exec()
, ma exec()
sta facendo:
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);
}
};
Ora PhoneGap.stringify()
risolve semplicemente JSON.stringify()
, quindi il codice PhoneGap sta eseguendo il metodo API notification.alert()
chiamando la funzione prompt()
con due oggetti/matrici JSON. La mia ipotesi è che prompt()
sia il native JavaScript prompt() function (non ho trovato nulla nel loro codice JavaScript che sovrascriverebbe questa funzione). Se questo è il caso, allora come funziona questo codice?
fanno uso simile di prompt()
in diversi altri luoghi, come pure:
PhoneGap.JSCallbackPort = prompt("getPort", "gap_callbackServer:");
C'è qualcosa di speciale nel modo in cui stanno chiamando prompt()
(in particolare includendo un secondo parametro della forma gap.*:.*
) che è abilitare un comportamento personalizzato? Oppure hanno in qualche modo sovrascritto il comportamento predefinito della funzione prompt()
da qualche parte esterna al loro codice JavaScript?
Si noti che questo si applica specificamente alla versione Android di PhoneGap, poiché le altre versioni sembrano utilizzare meccanismi leggermente diversi per l'esecuzione delle chiamate API.
Il prompt restituisce una stringa. Che c'è? – xdazz
Ciò che è sbagliato è che la versione standard di 'prompt()' visualizza una finestra di dialogo per l'utente. Comunque non è quello che sta succedendo qui. Non vi è alcuna finestra di dialogo visualizzata come risultato di queste chiamate 'prompt()', ma viene invocata un'altra parte dell'API di Phonegap. In sostanza, usano 'prompt()' come loro principale punto di ingresso API, e mi piacerebbe sapere come/perché. – aroth