Cordova не определяется после onDeviceReady

Я пытаюсь создать приложение Cordova и протестировать его в Ripple. Когда я запускаю приложение, срабатывает хук onDeviceReady, и у меня есть переменная cordova, и все переменные моего плагина доступны.

Однако после того, как приложение загружается, и я пытаюсь получить доступ к cordova из консоли, например, оно не определено.

Я не уверен, что происходит, но как-то это исчезает. Это вообще должно так работать с Ripple или надо все тестировать только на реальном устройстве/эмуляторе?

P.S. Это происходит и в совершенно новом пустом проекте, созданном в VS2015. Поэтому я действительно не понимаю, как я должен получить доступ к cordova и плагинам, если он каким-то образом станет неопределенным?


person Ilya Chernomordik    schedule 25.02.2017    source источник
comment
@llya Добавьте фрагмент кода, пожалуйста...   -  person Gandhi    schedule 25.02.2017
comment
@Gandhi На самом деле фрагмента кода нет, после загрузки приложения я просто пытаюсь получить доступ к Cordova в консоли, и он недоступен ... Он не будет доступен так же для моего собственного кода js за пределами onready ...   -  person Ilya Chernomordik    schedule 25.02.2017
comment
происходит ли событие готовности вашего устройства? Плагины Cordova доступны только с готовыми прослушивателями обратного вызова на устройстве.   -  person Gandhi    schedule 25.02.2017
comment
Да, готовое устройство работает нормально. Но как я буду работать с плагинами, если это только во время готовности устройства? Или они всегда доступны на реальном устройстве/эмуляторе?   -  person Ilya Chernomordik    schedule 25.02.2017
comment
не только во время готовности устройства, но и после запуска события готовности устройства... Я предлагаю вам просмотреть эту ссылку для примера, а не для объяснения - github.com/gandhirajan/Cordova_QR_Scanner/blob/master/www/js/   -  person Gandhi    schedule 25.02.2017
comment
Ну, это сложнее, чем я думал. Что я действительно пытаюсь сделать, так это получить доступ к кордове на сайте с внешним URL-адресом, а не в комплекте с приложением. Кажется, это не так просто, к сожалению. Спасибо за помощь, хотя :)   -  person Ilya Chernomordik    schedule 25.02.2017
comment
Опубликовали ответ на благо других. Пожалуйста, примите, если полезно.   -  person Gandhi    schedule 25.02.2017
comment
я не уверен на 100%, но вы получите кордову, поскольку undefined на ripple потому что cordova.js доступен после того, как вы создадите приложение .. ripple не эмулятор .. это просто веб-сайт   -  person Lakshay    schedule 25.02.2017


Ответы (3)


Cordova.js, указанный в вашем index.html, доступен после создания приложения с использованием Cordova. При тестировании в браузере файл недоступен. Поскольку вы тестируете эмулятор пульсации, который не является мобильным эмулятором, вы получите кордову только как неопределенную.

Запустите приложение Cordova на эмуляторе/устройстве, после чего вы получите переменную Cordova.

person Lakshay    schedule 25.02.2017
comment
платформа браузера также имеет файл Cordova.js, доступный после сборки платформы. На самом деле некоторые плагины поддерживаются и в браузерной платформе. Так что я не думаю, что это правильный ответ - person Gandhi; 25.02.2017
comment
пожалуйста, отмените этот ответ. Он может ввести в заблуждение других пользователей, которые ищут правильное решение. - person Gandhi; 26.02.2017

Доступ к коду плагина Cordova можно получить только после запуска события готовности устройства, что гарантирует успешную загрузку Cordova и плагинов.

Взгляните на этот пример кода для лучшего понимания. Надеюсь, поможет.

Обновление: если вы хотите получить доступ к внешнему URL-адресу через приложение, вам нужно использовать InAppBrowser для его достижения.

person Gandhi    schedule 25.02.2017

Думаю, я нашел ответ. Хитрость заключается в том, чтобы оставаться в сфере приложения на устройстве и загружать весь javascript с удаленного сервера. В приложении SPA, таком как Angular, требуется только начальная загрузка index.html приложения и ничего больше. На все файлы .js можно ссылаться, и приложение будет «автоматически обновляться».

person Ilya Chernomordik    schedule 26.02.2017
comment
для запуска внешнего url mydomain.com например. который может получить доступ к возможностям устройства - person Ilya Chernomordik; 26.02.2017
comment
вы можете использовать inappbrowser для того же, я думаю, и по-прежнему использовать возможности устройства - person Gandhi; 26.02.2017
comment
Ну, это, видимо, вообще не сработало, window.nagiator.store существует, когда я обращаюсь к нему из консоли, но не из приложения. Я не очень понимаю :( И window.navigator из консоли и приложения - это два разных объекта... - person Ilya Chernomordik; 26.02.2017
comment
По-видимому, то, чего я пытаюсь достичь, официально не поддерживается: cordova.apache.org/docs/en/latest/guide/next/. Так что, думаю, мне придется переосмыслить весь подход :) - person Ilya Chernomordik; 26.02.2017
comment
вы прочитали всю ссылку. Он упоминал о браузере inapp, как я и предполагал. - person Gandhi; 26.02.2017
comment
@ Ганди Да, я читал это. Но это не даст мне доступ к плагинам... - person Ilya Chernomordik; 26.02.2017
comment
к какому плагину вам нужно получить доступ и каковы ваши требования после открытия URL-адреса? - person Gandhi; 26.02.2017
comment
Я хотел бы обработать подписку, т.е. купить подписку на приложение, и для него есть доступный плагин, который вводит store глобальные переменные, которые недоступны для веб-сайта, работающего по URL-адресу. Но поскольку он не поддерживается, я думаю, мне придется отказаться от этой идеи :) - person Ilya Chernomordik; 26.02.2017
comment
Большое спасибо за помощь @Gandhi, я действительно нашел решение, которое работает. У меня есть index.html, который ссылается на удаленные файлы сценариев, и все мое угловое приложение фактически находится внутри этих файлов js. Это было очевидное решение, о котором я почему-то не подумал :( - person Ilya Chernomordik; 26.02.2017
comment
Рад, что ты взломал его. опять же, это сводится к тому, чтобы иметь полную функциональность в прослушивателе событий готовности устройства :) - person Gandhi; 27.02.2017