6

próbuje ustawić prawidłową base href wartość dla angularjs html5 internetowej aplikacji do pracy w Cordovaangularjs Cordova baza href

początkowo stosując $locationProvider.html5Mode(true) z <base href="/">:

  • aplikacja działa idealnie w normalnej przeglądarce
  • cordova podaje błędy zasobów dla css/js/templates itp.
    (Wydaje mi się, że szuka zasobów w katalogu głównym cordova, a nie w katalogu głównym platformy?)

spróbował kilka alternatyw są płynął tu na SO i UI-Router FAQs: (brak błędów

aktywa
  • znajdują się ok w Cordova zasobów:

    <base href="."> w trybie HTML5 zgodnie this odpowiedź)

  • ui Router przechodzi do ogona wirowania z pętli nieskończonej i komunikatu błędu
    Error: Failed to execute 'pushState' on 'History': A history state object with URL 'https://page/' cannot be created in a document with origin https://example.com

<base href="./"> w trybie HTML5:

  • aktywów znalezione w Cordova (bez błędów zasobu)
  • daje mi bał Error: 10 $digest() iterations reached. Aborting! wiadomość spróbował wykorzystać frankwallis solution wspomniano here ale to nie pomogło (ten sam błąd)

nie base href z $locationProvider.html5Mode({enabled: true, requireBase: false});

  • Aktywa znalezione w Cordova (brak błędów w zasobach)
  • strony rozpoczynają ładowanie w sobie? ... jak dwa razy w kanciastych bootstrapach w stanach niektórych?

moja definicja app config wygląda następująco:

myApp.config(['$locationProvider', '$urlRouterProvider', '$stateProvider', '$stickyStateProvider', function($locationProvider, $urlRouterProvider, $stateProvider, $stickyStateProvider) { 

    $locationProvider.html5Mode(true); 

    $stateProvider 
    .state('root', {   // we define a 'root' state so that we can load some essential data prior to any template being loaded 
     url: '', 
     abstract: true, 
     sticky: true, 
     views: { 
      'root': { 
       template: '<ui-view/>', 
      } 
     } 
    }) 
    .state('root.worldmap', { 
     url : '/worldmap', 
     templateUrl : 'templates/worldmap.tmpl.html' 
    }) 
    .state('root.faq', { 
     url : '/faq', 
     templateUrl : 'templates/faq.tmpl.html' 
    }) 
    .state("otherwise", { 
     url: "*path", 
     views: { 
      'root': { 
       template: "", 
       controller: ['$injector', function($injector) { 
        var $state = $injector.get("$state"); 
        $state.go('root.worldmap'); 
       }] 
      } 
     }, 
    }); 
    $stickyStateProvider.enableDebug(true); 
}]); 

Informacje: wykorzystaniem this method alternatywnego Cordova deviceready vs kanciasty.Element bootstrap dla Cordova/przeglądarce odpowiednio

Odpowiedz

5

OK więc sposób uzyskać tej pracy jest poprzez usunięcie bazy href I wyłączając tryb HTML5:

  • [opcjonalnie] tworzyć & kasę nowy oddział o nazwie dev-cordova lub podobny
    • ten pozwala szybko przełączać się między kodem przeglądarki i urządzenia
  • kasowania/skomentować <base href="/"> w głównym index.html
  • upewnić się, że tryb HTML5 jest niepełnosprawnych w app.js albo przez

    $locationProvider.html5Mode({ 
        enabled: false, 
        requireBase: false 
    }); 
    

    lub

    $locationProvider.html5Mode(false); 
    

Nie zapomnij uruchomić cordova build ios (po tym, jak ty chrząkniesz/łapiesz itp., aby skompilować pliki js)
... to zapewnia, że ​​pliki w katalogu cordova /platforms/ios/www są aktualizowane.