Intereting Posts
Получить дату с datepicker с помощью dialogfragment Как определить форму круга в файле чертежа android xml? Как создать подменю для Floating Action Button в Android Material Design? Как сделать Android GridLayout совместимым с более старой версией? Поддержка unicode в android ndk Должен ли я вручную закрывать HandlerThreads, созданные моим приложением, при уничтожении активности? Синхронизация ошибок с репликацией cyanogenmod Разработка мобильного сайта. Когда начать? Android RelativeLayout изменяет высоту программно SetOnItemClickListener () не работает на пользовательском ListView @ Android Выдает предложение при обработке исключений Android: enum vs static final ints? Как исправить плагин Eclipse ADT 22.3 / SDK Tools 22.3 со сломанным окном свойств? Ссылки на отдельный экран предпочтений Android из другого экрана настроек в формате XML Неожиданный префикс пространства имен «xmlns», найденный для фрагмента тега Неожиданный префикс пространства имен «карта», найденный для фрагмента тега

Телефонная связь и подсказка ()

Я просматривал источники Phonegap для Android и пытался проверить, что их метод notification.alert() просто делегирует функцию native 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 prompt () (я ничего не нашел в своем JavaScript-коде, который бы переопределял эту функцию). Если это так, то как работает этот код?

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

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

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

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

Solutions Collecting From Web of "Телефонная связь и подсказка ()"

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

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

 @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) { ...... } 

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

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