2015-03-18 2 views
8

У меня есть приложение Angular v1.3, в котором используется угловая ui-router v0.2.13 для всей маршрутизации. Сайт отлично работает на всех браузерах, включая IE 10 и IE 11, но не на IE 9 (мы решили не продолжать IE8, который, как я понимаю, не поддерживается v1.3, так или иначе). Несмотря на все мои усилия, IE 9 постоянно разрешает мой маршрут $stateProvider'sotherwise (который установлен в /*path, что является возможным преступником, поэтому я отключил этот маршрут для целей тестирования).Угловой UI-маршрутизатор, не разрешающий работу с Internet Explorer 9

В попытке получить любой другой маршрут, чтобы решить, я попытался установить $locationProvider.html5Mode(false), модифицировали $locationProvider.hashPrefix, изменил <base href="/" /> к различным URL-адресов, в том числе <base href="/#!"/>, и я даже включил xmlns:ng="http://angularjs.org" в <html> тег для хорошая мера. Независимо от того, что я пытаюсь, IE 9 постоянно пытается разрешить мой маршрут otherwise или ничего, если этот маршрут отключен. BTW, мой URL-адрес страницы главной страницы установлен в /.

Я был в моих глазных яблоках в коде с надвигающимся сроком запуска, поэтому я буду первым, кто признает, что я потенциально не замечаю ничего очевидного. Может ли кто-нибудь предложить какие-либо другие советы или рекомендации, чтобы заставить ui-router правильно разрешаться в IE 9?

ответ

0

Мы используем что-то вроде следующий:

<!DOCTYPE html> 
    <html lang="fr" xmlns="http://www.w3.org/1999/xhtml" ng-csp xml:lang="fr-CA"> 

//... 
var app = angular.module('YourApp', [...]); 
angular.bootstrap(document, ['YourApp'], {strictDi: true}) 

//... 
    angular.module('YourApp').config(['$stateProvider', '$urlRouterProvider', '$locationProvider', 
    function ($stateProvider, $urlRouterProvider, $locationProvider) { 
    $locationProvider.html5Mode(false); 
    $locationProvider.hashPrefix('!'); 

    $urlRouterProvider.otherwise('/'); 

    $stateProvider 
     .state('home', { 
     url: '/', 
     cache: false, 
     controller: 'HomeController as vm' 
     }) 
     .state('anon', { 
     url: '/info', 
     controller: 'AnonController as vm' 
     }) 

// и т.д. ...

0

Для меня IE9 маршрутов правильно для хэша-адресов, /#/example, но посещение / разрешило бы к иному пути. Я работал над этим, используя функцию в противном случае и проверяя URL-адрес в нем.

$urlRouterProvider.otherwise(function($injector){ 
    var state = $injector.get('$state'); 
    var location = $injector.get('$location'); 
    if (!location.url()) { 
     // handle HTML5 fallback/IE9 when url has no hash 
     return state.go('home'); 
    } 
    state.go('404'); 
}); 
Смежные вопросы