0

Я работаю над веб-приложением, используя ASP.Net 5 и AngularJS. Я завершил его, и он отлично работает, но когда он был выпущен в прямом эфире, я узнал, что он не работает в IE9, что является большой частью нашей компании.

Я использую UI-маршрутизатор, и я был парование Стивен Вальтер учебник для маршрутизации клиента: link here

К сожалению, его метод удаления # из URL работает только для IE10 +, потому что IE9 не поддерживает HTML5 History API ,

Проведите несколько дней на этом уже и не можете найти, на каком этапе я должен продолжать использовать чистый URL для современных браузеров, но не IE9?

Мой web.config:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    <rewrite> 
     <rules> 
     <!--Redirect selected traffic to index --> 
     <rule name="Index Rule" stopProcessing="true"> 
      <match url=".*" /> 
      <conditions logicalGrouping="MatchAll"> 
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      <add input="{REQUEST_URI}" matchType="Pattern" pattern="^/api/" negate="true" /> 
      </conditions> 
      <action type="Rewrite" url="/index.html" /> 
     </rule> 
     </rules> 
    </rewrite> 
    <handlers> 
     <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" /> 
    </handlers> 
    <httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" stdoutLogEnabled="false" startupTimeLimit="3600" forwardWindowsAuthToken="true" /> 
    </system.webServer> 
</configuration> 

Мои app.js:

app.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', '$sceDelegateProvider', 
    function ($stateProvider, $urlRouterProvider, $locationProvider, $sceDelegateProvider) { 

     $locationProvider.hashPrefix('!').html5Mode({ 
      enabled: true, 
      requireBase: false 
     }); 

     $stateProvider 
     .state('app', { 
      abstract: true, 
      url: '', 
      templateUrl: '/templates/appcontainer.html', 
      controller: 'indexController' 
     }) 
     .state('app.stateIndex', { 
      url: '/', 
      templateUrl: '/templates/list.html', 
      controller: 'dashListController' 
     }) 
     .state('app.stateList', { 
      url: '/list', 
      templateUrl: '/templates/list.html', 
      controller: 'dashListController' 
     }) 
     .state('app.stateDashboard', { 
      url: '/dashboard/:id', 
      templateUrl: '/templates/dashboard.html', 
      controller: 'dashboardController' 
     }) 
}); 

Когда я запускаю его в IE9, отображается пустая страница и когда я проверяю исходный код index.html , но содержимое <ui-view class="main-view"></ui-view> - нет.

ответ

0

Какой шаг я должен использовать, используя чистый URL для современных браузеров, но не IE9?

Используйте условный оператор в блоке конфигурации, чтобы исключить IE9 из html5Mode через обнаружение функции. Например:

if(!!$window.innerWidth && !$window.matchMedia) 
    { 
    $locationProvider.html5Mode({enabled: false, requireBase: false}); 
    $locationProvider.hashPrefix("search"); 
    } 
else 
    { 
    $locationProvider.html5Mode({enabled: true, requireBase: false}); 
    } 

Ссылки