Я просматривал Phonegap исходники для Androi d и пытается убедиться, что их метод notification.alert ()
просто делегирует встроенную функцию JavaScript alert ()
. Их код делает:
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]);
};
Что мне кажется «предупреждение», будет интерпретироваться как имя функции, вызываемой в exec ()
, но exec ()
выполняет:
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);
}
};
Сейчас PhoneGap.stringify ()
просто преобразуется в JSON.stringify ()
, поэтому код телефонной связи выполняет метод API notification.alert ()
, вызывая приглашение ()
функция с двумя объектами / массивами JSON. Я предполагаю, что prompt ()
- это встроенная функция JavaScript prompt () (я не нашел ничего в их коде JavaScript, которое могло бы переопределить эту функцию). Если это так, то как работает этот код?
Они аналогичным образом используют prompt ()
в различных других местах:
PhoneGap.JSCallbackPort = prompt("getPort", "gap_callbackServer:");
Есть ли что-то особенное в том, как они вызывают prompt ()
(в частности, с помощью включая второй параметр формы пробел. *:. *
), который включает какое-то настраиваемое поведение? Или они каким-то образом переопределили поведение по умолчанию функции prompt ()
где-то вне их кода JavaScript?
Обратите внимание, что это относится конкретно к версии Phonegap для Android, поскольку другие версии, похоже, используют немного другие механизмы выполнения вызовов API.