8

尝试base href为 angularjs html5 Web 应用程序设置正确的值以在科尔多瓦工作

最初使用$locationProvider.html5Mode(true)with <base href="/">

  • 应用程序在普通浏览器中完美运行
  • cordova 为 css / js / 模板等提供资源错误
    (我相信它会在 cordova 根目录而不是平台根目录中查找资源?)

在 SO 和 ui-router FAQs上尝试了一些替代方案:

<base href=".">按照这个答案使用html5模式:

  • 在科尔多瓦发现资产正常(无资源错误)
  • ui-router 进入无限循环的尾部旋转,并出现以下错误消息
    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="./">使用 html5 模式:

没有base href_$locationProvider.html5Mode({enabled: true, requireBase: false});

  • 在科尔多瓦找到的资产(没有资源错误)
  • 页面开始在自己内部加载??...在某些州两次像角引导?

我的应用配置定义如下所示:

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);
}]);

有关信息:分别为cordova/浏览器使用这种替代cordova devicereadyvs angular.element bootstrap的方法

4

1 回答 1

5

好的,所以让这个工作的方法是删除基本的 href禁用 html5 模式:

  • [可选] 创建并签出一个名为dev-cordova或类似 的新分支
    • 这使您可以在浏览器和设备代码之间快速切换
  • 删除/评论<base href="/">主要index.html
  • 确保 html5模式被禁用app.js

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

    或者

    $locationProvider.html5Mode(false);
    

不要忘记运行cordova build ios(在您 grunt / gulp 等编译 js 文件之后)
...这可确保更新 cordova/platforms/ios/www目录中的文件。

于 2017-02-17T21:47:47.557 回答