tulov / angular-yandex-map

AngularJS directive to work with Yandex maps
173 stars 58 forks source link

Поддержка Apache Cordova #43

Open eugenehr opened 8 years ago

eugenehr commented 8 years ago

В мобильных приложениях на базе Apache Cordova протоколом является 'file://', из-за чего строка в ya-map-2.2.js:76:

var loadUrl = '//api-maps.yandex.ru/'+yaMapSettings.version+'/?load=package.full&lang=' + 
    yaMapSettings.lang +'&coordorder=' +yaMapSettings.order;

Формирует ссылку вида: file://api-maps.yandex.ru/... и не может загрузить скрипт.

Trylar commented 8 years ago

+1, столкнулась с аналогичной проблемой

borodatych commented 8 years ago

+1, все еще актуально.

DenniLa2 commented 8 years ago

В строке, где формируется loadUrl просто принудительно ставьте протокол: var loadUrl = 'http://api-maps.yandex.ru/' + yaMapSettings.version + '/?load=package.full&lang=' + yaMapSettings.lang + '&coordorder=' + yaMapSettings.order;

DenniLa2 commented 8 years ago

И Тулову Гранд Респект!

borodatych commented 8 years ago

Ясен пень что ставить. А потом при обновление помнить еще про это...

eugenehr commented 8 years ago

Так и делаем, но как было сказано выше, при обновлении или новой установке через npm эти изменения теряются.

Focushift commented 8 years ago

Похоже что появилась другая проблема:

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

borodatych commented 8 years ago

Осмелюсь предположить, что используете Google Chrome. Не искал причину, но яндекс.карты не работают в нем. Да и вообще, к примеру, яндекс.диск через раз в хроме работает. Видимо это война....

Focushift commented 8 years ago

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

borodatych commented 8 years ago

Failed to load resource - не может загрузить ресурс. Опять предположительно, попробуйте убрать начальный слэш.

Focushift commented 8 years ago

Студия отображает ошибку внутри загруженного с яндекса скрипта, напомню что ошибка net::ERR_NAME_NOT_RESOLVED также внутри скрипта есть такое: "services": { "coverage": "https://api-maps.yandex.ru/services/coverage/", "geoxml": "https://api-maps.yandex.ru/services/geoxml/", "route": "https://api-maps.yandex.ru/services/route/", "regions": "https://api-maps.yandex.ru/services/regions/", "geocode": "//geocode-maps.yandex.ru/", "suggest": "//suggest-maps.yandex.ru/", "search": "https://api-maps.yandex.ru/services/search/", "inception": "https://api-maps.yandex.ru/services/inception/" } мне кажется тут снова проблема с file:

borodatych commented 8 years ago

Странно, из какого файла этот объект? Тут (https://github.com/tulov/angular-yandex-map/blob/master/example/2.2/ya-map-2.2.js) нет, как и в соседних файлах. Проблема точно в текущей библиотеке?

Focushift commented 8 years ago

Смотрим на var loadUrl = 'http://api-maps.yandex.ru/'+yaMapSettings.version+'/?load=package.full&lang=' + yaMapSettings.lang + '&coordorder=' + yaMapSettings.order; потом на функцию var loadScript = function(url, callback)

ya-map-2.2.js это просто загрузчик скрипта с узла яндекса, который уже рисует саму карту

borodatych commented 8 years ago

Вы сами ответили на вопрос - это просто загрузчик скрипта с узла яндекса. Может стоит в яндекс написать? Я используют в приложение на Ionic, у меня все работает.

Focushift commented 8 years ago

Я тоже пытаюсь сделать это в Ionic. А каким образом вы разрешили доступ из приложения к апи яндекс? Так правильно? <meta http-equiv="Content-Security-Policy" content="default-src 'self' http://*.yandex.ru http://*.yandex.net https://*.yandex.ru https://*.yandex.net data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; ">

Можно посмотреть на ваш код?

eugenehr commented 8 years ago

В config.xml нужно прописать пару строк

  <access origin="*"/>
  <allow-intent href="*"/>

а также дождаться ionic.platformReady и только тогда инициализировать карты. Работает на iOS WebView и Crosswalk под андройдом

Focushift commented 8 years ago

Добавил, все равно в эмуляторе ошибка. Я отображаю карту в отдельном view, т.е. ionic.platformReady мне дожидаться не нужно, т.к. карта начинает грузиться только при открытии нужной страницы. Или нет?

Что еще интересно, пример отсюда https://tech.yandex.com/maps/doc/jsapi/2.1/quick-start/tasks/quick-start-docpage/ в моем приложении вообще не работает, только через ангуляровскаю обертку.

eugenehr commented 8 years ago

Нет, скрипт на загрузку файлов карты отрабатывает сразу, и, если приложение еще не готово, карта не будет работать

Focushift commented 8 years ago

Если я все правильно понял, скрипт срабатывает тогда, когда видит html тег , а в моем случае он на отдельной странице.

Я слегка разобрался, я брал файлик скрипта ya-map-2.2.js из папки примеров(с ним хотябы в браузере работает), сейчас я взял ya-map-2.1.min.js и при попытке отображения карты я получал Refused to load the image 'data:image/svg+xml;base64 ... because it violates the following Content Security Policy directive: "default-src 'self' *". Note that 'img-src' was not explicitly set, so 'default-src' is used as a fallback. чтобы заработало нужно ОБЯЗАТЕЛЬНО установить <meta http-equiv="Content-Security-Policy" content="default-src 'self' http://*.yandex.ru http://*.yandex.net https://*.yandex.ru https://*.yandex.net data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; "> после чтото уже начало грузиться, но теперь другая проблема, карта в браузере рисуется с размерами 0 х 0, если растянуть на 100%, то отображается левый верхний угол.

Focushift commented 8 years ago

Извиняюсь за столько потраченного времени, решилось с использованием скрипта версии 2.2 и указанием контент полиси как в посте выше, у приложения не было доступа на отрисовку изображений из data: и параметры доступа в config.xml не помогали.