Apache Cordova: повышение событий из веб-просмотра - PullRequest
0 голосов
/ 10 июня 2018

new apache cordova dev здесь.

У меня есть очень простое приложение apache cordova, которое является просто оболочкой для моего веб-проекта.

В событии onDeviceReady я просто делаю очень просто и делаю:

var url = "http://www.app.com:3000/users/sign_in";

Приложение работает.Теперь я хотел, чтобы мое веб-приложение вызывало уведомления в телефоне, поэтому я подумал, что я могу вызвать событие HTML из своего веб-приложения в приложение cordova, а затем заставить приложение cordova запускать нативное уведомление на телефон с помощью плагина.

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

Так что я пытаюсь отправить событие из Интернета:

var customEvent = new CustomEvent("notification", { detail: { message: message, options: options }, bubbles: true });
document.dispatchEvent(customEvent);

И привязать его к приложению cordova app.initialize:

document.addEventListener('notification', this.onNotification.bind(this), false);

Но, когда я отправляю сообщение о событии через Интернет, приложение Cordova не получает его.После дальнейших исследований я обнаружил, что объект документа в приложении cordova, похоже, не совпадает с объектом документа в моем веб-приложении.

Я предполагал, что это было очень распространенным явлением, но я огляделсяи я не мог найти много людей, делающих это.Возможно ли это (передача событий из веб-приложения в приложение cordova)?если нет, то как лучше всего связать мое веб-приложение с моим приложением cordova?

1 Ответ

0 голосов
/ 15 июля 2018

Я обнаружил, что при перенаправлении локального окна с помощью window.location.href вы теряете локальный DOM, и в основном все, что вы делаете в приложении, игнорируется.

Начиная с этого, я добавилплагин InAppBrowser и открыл мое веб-приложение как окно _blank и настроил его так, чтобы он выглядел в полноэкранном режиме.

    webWindow = cordova.InAppBrowser.open(url, '_blank', 'location=no,zoom=no');

После этого я обнаружил, что невозможно передавать события из веб-приложения в cordovaприложение.Я пытался использовать addEventListener и отправлять события из Интернета, но не смог заставить его работать.

Поэтому я прекратил свой хакерский путь: я использовал методvaluScript для объекта webWindow.ИспользуяvaluScript я устанавливаю и извлекаю переменную для объекта окна в сети.Приблизительно каждые 5 секунд я опрашиваю переменную и, если что-то есть, я извлекаю значение и очищаю переменную.

Со стороны Интернета я заполняю это каждый раз, когда приходит новое уведомление.

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

...