Подтвердить что ты не робот

Телефонная связь - автоматически включающая правильную кордову

Я разрабатываю приложение phonegap как для iOS, так и для Android, и имею версию каталога WWW с git. Я знаю, что в моем файле HTML должен быть указан правильный файл Cordova.js(в зависимости от того, на какой платформе я сейчас развиваюсь).

Немного раздражает вытаскивание изменений на www на iOS, когда кто-то работал над Android. Это дает мне бесконечное предупреждение gap_poll.

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

Есть ли способ автоматически определить, какую версию Кордовы включить? Таким образом, он будет работать на любой платформе, и нам не придется делать утомительные изменения.

4b9b3361

Ответ 1

У меня такая же настройка с моим общим HTML/JS как подмодуль Git. Мой index.html находится в общей папке и включает файлы JS для платформы, используя относительный путь.

Есть 3 проекта Git - Android, iOS и Shared. Совместно добавляется как подмодуль в Android и iOS.

Структура папок

www
|-platform
    |-js/libs/cordova.js
|-shared
    |-index.html

И в index.html

<script type="text/javascript" src="../platform/js/libs/cordova.js"></script>

Я использую ту же идею, что и JS файлы для плагинов, которые также зависят от платформы.

Ответ 2

Следующий код отлично подходит для меня:

    function init() {
        if(isAndroid()){
            $("script").attr("src", "lib/android/cordova-1.7.0.js").appendTo("head");
        }else if(isiOS()){
            $("script").attr("src", "lib/ios/cordova-1.7.0.js").appendTo("head");
        }

         document.addEventListener("deviceready", onDeviceReady, false);
    }

    function isAndroid(){
        return navigator.userAgent.indexOf("Android") > 0;
    }

    function isiOS(){
        return ( navigator.userAgent.indexOf("iPhone") > 0 || navigator.userAgent.indexOf("iPad") > 0 || navigator.userAgent.indexOf("iPod") > 0); 
    }

    function onDeviceReady(){
        console.log("device is ready");
    }

Вы можете проверить полный исходный код здесь

Ответ 3

У вас должен быть только хозяин WWW под контролем источника, который не должен содержать никаких файлов cordova. Они должны быть добавлены в телефонную папку в папку вашей платформы, когда вы создадите сборку телефонных звонков. Таким образом, ваш общий index.html может иметь:

<script type="text/javascript" src="cordova.js"></script>

В вашем хозяине WWW вы не будете иметь cordova.js script, но вы будете делать в своей папке платформы /android, когда вы выполните:

phonegap build android

Если вам нужно условно настроить содержимое в папках платформы /xyz, Grunt.JS - отличный вариант.

Ответ 4

В моем случае я просто создал zip файл для папки www без cordova.js или cordova-1.7.0.js(или другой версии). Я отправил этот zip в процесс сборки и создал правильный файл cordova.js, чтобы он работал на iOS и Android.

Скажите, если это сработало.

Ответ 5

@dhaval ответ не работал у меня в приложении Cordova на iOS 7.1.1. Хотя тег script был добавлен в заголовок, сценарии на самом деле не загрузились, как я проверял с помощью удаленного инспектора Safari.

Вместо этого я добавил следующий script, который я схватил из другого ответа SA.

function getScript(src, func) {
    var script = document.createElement('script');
    script.async = "async";
    script.src = src;
    if (func) {
       script.onload = func;
    }
    document.getElementsByTagName("head")[0].appendChild( script );
}

а затем

if ( navigator.userAgent.indexOf("iPhone") > 0 || navigator.userAgent.indexOf("iPad") > 0 || navigator.userAgent.indexOf("iPod") > 0) {
  getScript("js/cordova_ios.js");
} else if (navigator.userAgent.indexOf("Android") > 0) {
  getScript("js/cordova_android.js");
}

document.addEventListener("deviceready", onDeviceReady, false);

Ответ 6

Вышеупомянутое решение не сработало для меня. Поэтому я добавил это решение jquery:

    var isAndroid = /android/i.test(navigator.userAgent.toLowerCase());

if (isAndroid)
{
var script = document.createElement('script');
script.src = 'cordova/android/cordova.js';
 document.head.appendChild(script);
}
var IOS = /ipad|iphone|ipod/i.test(navigator.userAgent.toLowerCase());
if (IOS)
{
 var script = document.createElement('script');
 script.src = 'cordova/ios/cordova.js';
 document.head.appendChild(script);
}

То же самое касается другой платформы Phonegap, для телефона Windows просто добавьте /windows phone/etc.

И если у вас есть плагины, которые также могут отличаться от platfrom для платформы. Просто добавьте папку плагина и cordova_plugin.js в ту же папку.