У меня есть приложение Cordova, ожидающее события deviceready
, и когда это событие срабатывает, установите window.location.href
на удаленный сайт, скажем, http://foo.bar.com/lander.html
. С этой страницы у меня есть несколько ссылок на другие страницы - скажем page1.html
и page2.html
. Я хочу поместить кнопку в page1.html
, которая вызывает функцию Cordova navigator.notification.vibrate
.Cordova - Доступ к функциям устройства доступа из удаленного HTML
У меня есть установленная выше и все работает, за исключением того, что navigation.notification
не определено, когда я нажимаю кнопку в page1.html
, чтобы попытаться заставить устройство вибрировать. Я скопировал cordova.js
на foo.bar.com
и ссылаюсь на него с page1.html
. Должен ли я включать другие исходные файлы javascript на foo.bar.com
? Будет ли этот подход когда-либо работать?
Будет ли это работать, если вместо изменения местоположения окна я должен был получить контент от AJAX и поместить содержимое в контейнер div на странице index.html
, которая лежит в основе приложения Cordova?
Это все на iOS, если это имеет значение. Я включил только плагины dialogs
и vibration
. Я получаю событие deviceready
в приложении Cordova и успешно перенаправляюсь на удаленный сайт. Пожалуйста, дайте мне знать, если есть другие факторы, которые я должен принять во внимание. Благодарю.
ОБНОВЛЕНИЕ 1: Я получил вибрацию от локального index.html приложения приложения Cordova, используя навигатор.вибрат вместо navigator.notification.vibrate. Изменение этого на удаленном сайте не помогло. Я также пробовал включать в себя копии vibr.js, Cordova.js и cordova_plugins.js с удаленной страницы - все равно не повезло.
ОБНОВЛЕНИЕ 2: Я нашел в документах Кордовы, где обсуждаются вопросы, о которых я спрашиваю: Вызов функций JavaScript Кордовы с удаленной страницы HTML (страница HTML, не сохраненная локально на устройстве) является неподдерживаемой конфигурацией. Это связано с тем, что Cordova не была разработана для этого, и сообщество Apache Cordova не тестирует эту конфигурацию. Хотя он может работать в некоторых случаях, он не рекомендуется и не поддерживается. Есть проблемы с одной и той же политикой происхождения, поддерживая синхронизацию JavaScript и родных частей Кордовы в одной и той же версии (поскольку они связаны через частные API, которые могут меняться), надежность удаленного контента, вызывающего местные локальные функции, и потенциальное отклонение магазина приложения ,
Отображение удаленного контента HTML в веб-просмотре должно быть выполнено с использованием InAppBrowser Кордовы. InAppBrowser разработан так, что JavaScript, работающий там, не имеет доступа к API-интерфейсам Кордовы JavaScript по причинам, перечисленным выше. См. Руководство по безопасности.
Исходя из этого, это звучит по-настоящему, но, как будто мы сами не будем. Тем не менее, если кто-то успешно это делает, мы хотели бы попробовать.
Как вы сказали, это неподдерживаемая конфигурация не рекомендуется. В любом случае, если вы загрузите всю платформу/ios/www-папку на сервер, она должна работать – jcesarmobile
. Я пытаюсь достичь того же, но пока не повезло. Является ли он по-прежнему неподдерживаемым, и единственным «хорошим» выбором является объединение всего приложения, если я хочу получить доступ к родным функциям? –
@IlyaChernomordik В итоге мы получили что-то работающее, динамически запрашивая JS с сервера во время выполнения.Если я помню, это связано с трюком с добавлением элементов сценария на страницу и что-то делать с тегом IMG. YMMV. – Patrick87