AngularJS Hashtags,Deep链接和IE9

时间:2014-07-22 13:59:14

标签: angularjs angular-ui-router

我目前处于这样一种情况:我必须为AngularJS应用程序提供IE9的支持,同时保留我的链接中的主题标签(从电子邮件中发送的链接等等。客户端无论角度如何,都不重要)。

通过使用:

,我已经达到了几乎一切正常的地步
$locationProvider.html5Mode true
.hashPrefix '!'

这适用于所有内容,转换链接:

example.com/whatever 

example.com/index.html#!/whatever 

现在我遇到了问题,如果我点击路线:example.com (一个完全没有参数的网址),我的应用程序没有启动,我收到了这个错误:

TypeError: Cannot read property 'indexOf' of undefined

在支持历史记录API的浏览器中,一切正常。

2 个答案:

答案 0 :(得分:-1)

将HTML5Mode与ui-router一起使用时,必须设置URL重写服务器端。如何完成这项工作取决于您的服务器端技术。解释了各种方法here

例如,IIS将使用以下内容:

<system.webServer>
  <rewrite>
    <rules> 
      <rule name="Main Rule" stopProcessing="true">
        <match url=".*" />
        <conditions logicalGrouping="MatchAll">
          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />                                 
          <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        </conditions>
        <action type="Rewrite" url="/" />
      </rule>
    </rules>
  </rewrite>
</system.webServer>

结果是所有传入的请求都将被IIS路由到站点的根目录,而IIS又会加载index.html页面,该页面可能包含你的ng-app标签和angular.js引用。这将导致客户端路由启动(在这种情况下为ui-router),并且您将在HTML5路由模式下启动并运行。

答案 1 :(得分:-1)

所以我想出了我的问题。

我们将base href设置为index.html,这会将index.html添加到IE9浏览中的所有网址。

当我将base href更改为/时,一切正常。