Przeglądałem źródła Phonegap dla Androida i próbowałem zweryfikować, czy ich metoda notification.alert()
po prostu przekazuje funkcję natywnej JavaScript alert()
. Ich kodu:Phonegap i monit()
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]);
};
Który patrzy na mnie jak „alarm” będzie interpretowany jako nazwa funkcji, aby powołać się w exec()
, ale exec()
robi:
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);
}
};
Teraz PhoneGap.stringify()
prostu postanawia JSON.stringify()
, więc kod Phonegap wykonuje metodę API notification.alert()
, wywołując funkcję prompt()
z dwoma obiektami/tablicami JSON. Moje założenie jest takie, że prompt()
jest native JavaScript prompt() function (nie znalazłem nic w ich kodzie JavaScript, który zastąpiłby tę funkcję). Jeśli tak jest, to w jaki sposób działa ten kod?
Robią podobnym zastosowaniu prompt()
w różnych innych miejscach, a także:
PhoneGap.JSCallbackPort = prompt("getPort", "gap_callbackServer:");
Czy jest coś szczególnego sposobu ich wywołującego prompt()
(w szczególności poprzez włączenie drugi parametr formularza gap.*:.*
), który jest włączanie niestandardowych zachowań? A może w jakiś sposób nadpisują domyślne zachowanie funkcji prompt()
gdzieś poza ich kodem JavaScript?
Należy zauważyć, że dotyczy to wersji Android Phonegap, ponieważ inne wersje wydają się używać nieco innych mechanizmów do wykonywania wywołań API.
Prośba zwraca ciąg znaków. Co jest nie tak? – xdazz
Co jest nie tak, to że standardowa wersja 'prompt()' wyświetla okno dialogowe dla użytkownika. Jednak to nie jest to, co się tutaj dzieje. W wyniku tych wywołań 'prompt()' nie pojawia się okno dialogowe, zamiast tego wywoływana jest inna część interfejsu API Phonegap. Zasadniczo używają one 'prompt()' jako podstawowego punktu wejścia API i chciałbym wiedzieć jak/dlaczego. – aroth