IE9 和 angular 路由问题

IE9 and angular routing issues

这会有点长,但我希望能说清楚。请问我是否没有充分解释一个观点。

使用以下 structure/setup,我 h\got 一切都可以在除 IE9 之外的所有浏览器中运行。对于以下任何内容,我不需要提供支持;因此问题在于EI9。我没有使用 UI-路由器。

  1. 网站URLhttp://domainname

  2. 内部页面 link 1 <a href="page1">page1</a> - 点击这里我会进入 http://domainname/page1

  3. 内部页面 link 2 <a href="page2">page2</a> - 点击这里我会进入 http://domainname/page2

  4. 基础<base href="/">

  5. HTML5 模式启用 $locationProvider.html5Mode(true)

  6. 相关路由配置

.when('/',{ templateUrl : 'pages/homepage.html', controller : 'homepageController' }).when('/page1',{ templateUrl : 'pages/page1.html', controller : 'page1Controller' }).when('page2',{ templateUrl : 'pages/page2.html', controller : 'page2Controller' })

  1. PhP htaccess redirect RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule . index.php [L] - 这是当你直接进入页面,而不是登陆索引时,因此不会给路由机制接管的机会

我的IE9问题

上面的网站 URL 变成了 http://domainname/#/ - /#/ 被插入到 link - 我希望它消失,因为它会导致以下问题:

  1. 访问 <a href="page1">page1</a> 时 - 我收到的 link 变成了 http://domainname/#/page1 - 但加载正常。尝试从 page1
  2. 访问 page2 页面时,问题变得很明显
  3. 访问 <a href="page2">page2</a> 时 - 我被发送到的 link 变成 http://domainname/#/page1/page2,最坏情况下应该是 http://domainname/#/page2 - Angular 添加 URL 到现有的 URL,作为一种子路径。其他页面依此类推 - URL 连接。

我认为这与 IE9 不支持 HTML5 push/pop 的事实有关,我猜 Angular 使用。我不确定,我是新手。据我所知,至少 $locationProvider.html5Mode(true) 是 IE9 的问题。

我目前陷入困境,将不胜感激任何有关此事的帮助。

编辑: 下面的答案是一个可行的解决方案,我会在进一步调查后接受 "solved issue" 的答案。如果你有同样的问题,使用它。

我为 ie9 下的 angular 1.3 路由问题创建了这个插件 example。你可以在ie9下运行这个例子,运行很好。

请注意,plunker 示例将 <base href = ""/> 动态设置为 document.location。对于你contatenated url的问题,我认为可能是<base href>的问题。设置为 <base href="/" /> 应该可以解决问题。

我也在github中为这个问题创建了一个repo(事实上,这是一个无限$digest问题,但路由仍然有效,参见#9235). Your can test this sample。在这个示例中我设置<base href="/app/" />, 因为基数 url 是 app.

希望得到帮助。