我目前处于这样一种情况:我必须为AngularJS应用程序提供IE9的支持,同时保留我的链接中的主题标签(从电子邮件中发送的链接等等。客户端无论角度如何,都不重要)。
通过使用:
,我已经达到了几乎一切正常的地步$locationProvider.html5Mode true
.hashPrefix '!'
这适用于所有内容,转换链接:
example.com/whatever
到
example.com/index.html#!/whatever
现在我遇到了问题,如果我点击路线:example.com
(一个完全没有参数的网址),我的应用程序没有启动,我收到了这个错误:
TypeError: Cannot read property 'indexOf' of undefined
在支持历史记录API的浏览器中,一切正常。
答案 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
更改为/
时,一切正常。