Phonegap и подсказка () - PullRequest
       4

Phonegap и подсказка ()

9 голосов
/ 31 августа 2011

Я просматривал источники Phonegap для Android и пытался проверить, что их метод 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]);
};

То, что для меня выглядит как «alert», будет интерпретировано как имя функции, которую нужно вызвать в 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(), поэтому код Phonegap выполняет метод API notification.alert(), вызывая функцию prompt() с двумя объектами / массивами JSON.Я предполагаю, что prompt() - это собственная функция подсказки JavaScript () (я не нашел в их коде JavaScript ничего, что могло бы переопределить эту функцию).Если это так, то как работает этот код?

Они также используют prompt() в других местах:

PhoneGap.JSCallbackPort = prompt("getPort", "gap_callbackServer:"); 

Есть ли что-то особенное в том, как они звонят prompt() (в частности, включив секундупараметр вида gap.*:.*), который позволяет настраивать поведение?Или они каким-то образом переопределяют поведение по умолчанию функции prompt() где-то вне их кода JavaScript?

Обратите внимание, что это относится конкретно к версии Phonegap для Android, так как другие версии, похоже, используют немного другие механизмы для выполнениявызовы API.

Ответы [ 2 ]

7 голосов
/ 31 августа 2011

Функция prompt() была переопределена.

Вы можете найти это в DroidGap.java.

@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
......
}
4 голосов
/ 31 августа 2011

Перестал работать мост JavaScript в Java на эмуляторе в Android 2.3. Умный участник PhoneGap обнаружил, что обходной путь в ответ на приглашение был обходным путем.

Вот проблема Android .

...