Как работает Phonegap? - программирование
Подтвердить что ты не робот

Как работает Phonegap?

Мы используем PhoneGap для использования собственных возможностей мобильного устройства. Как работает внутренне? Как мы можем получить доступ к классам реализации PhoneGap из метода JavaScript? Может кто-нибудь объяснить это?

4b9b3361

Ответ 1

Я сделал несколько слов о том, как Cordova iOS передает сообщения в WebView. Вот как передать сообщение с iOS на JavaScript.

UIWebView Класс имеет метод под названием stringByEvaluatingJavaScriptFromString.

Если вы посмотрите в некоторых файлах проекта iOS Cordova, они передают JavaScript как строку, которая должна быть выполнена для этой функции, например. CDVPlugin.m.

Я не знаю, пишет ли iOS новый DOM node (что-то вроде <script>alert('from iOS');</script>) или выполняет JavaScript через специальный крючок в Safari. Я полагаю, что позже, в вышеупомянутой документации, упомянутой выше, говорится:

Время выполнения JavaScript ограничено 10 секундами для каждой точки входа верхнего уровня. Если ваш script исполняется более 10 секунд, веб-просмотр прекращает выполнение script. Вероятно, это произойдет в случайном месте вашего кода, поэтому могут возникнуть непредвиденные последствия. Это ограничение наложено, поскольку выполнение JavaScript может привести к блокировке основного потока, поэтому, когда скрипты запущены, пользователь не может взаимодействовать с веб-страницей.

Распределение JavaScript также ограничено 10 МБ. Веб-представление вызывает исключение, если вы превысите этот предел для общего распределения памяти для JavaScript.

Я не знаю, как они могли бы навязать эти ограничения без специального доступа к этому внутреннему состоянию UIWebView, поэтому я сомневаюсь, что они просто вставляют новый DOM node.

Ответ 3

Исходный код открыто доступен и, следовательно, может быть проверен, чтобы увидеть, как он реализован, что отличается на каждой платформе, поэтому вы не можете получить один ответ, который будет охватывать все ОС. На iOS это делается с использованием UIWebView, где собственный код может быть вызван путем принудительного изменения местоположения браузера с использованием собственной схемы URL-адресов. Это изменение приводит к вызову метода в нативном коде, который может проверять схему URL-адреса и передавать параметры, а затем уходить и выполнять некоторую обработку с использованием relavant. Затем есть способ вызвать Javascript из Objective-C в iOS, который можно использовать для передачи результатов обратно на сторону Javascript.

Весь подробный процесс слишком длинный, чтобы описать здесь ответ.

Конечно, как это реализовано на других платформах.

Этот механизм можно отвлечь за API, чтобы приложения PhoneGap не знали о различиях в деталях реализации конкретной платформы.

Почему бы не спросить на форуме PhoneGap или посмотреть исходный код, если вам требуется много деталей.