【发布时间】:2015-03-25 13:21:46
【问题描述】:
这会有点长,但我希望让自己清楚。请问我是否解释得不够好。
使用以下结构/设置,我可以在除 IE9 之外的所有浏览器中运行所有内容。对于以下任何内容,我不需要提供支持;因此问题在于EI9。我没有使用 UI 路由器。
网站网址
http://domainname内部页面链接 1
<a href="page1">page1</a>- 单击此链接应将我转到http://domainname/page1内部页面链接 2
<a href="page2">page2</a>- 单击此链接应将我转到http://domainname/page2基础
<base href="/">启用HTML5模式
$locationProvider.html5Mode(true)相关路由配置
.when('/',{
templateUrl : 'pages/homepage.html',
controller : 'homepageController'
}).when('/page1',{
templateUrl : 'pages/page1.html',
controller : 'page1Controller'
}).when('page2',{
templateUrl : 'pages/page2.html',
controller : 'page2Controller'
})
- PhP htaccess redirect
RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule . index.php [L]- 这适用于当您直接转到页面,而不是登陆索引时,因此不会让路由机制有机会接管
我的 IE9 问题
上面的网站 URL 被转换为 http://domainname/#/ - /#/ 被插入到链接中 - 我希望它消失,因为它会导致以下问题:
- 当访问
<a href="page1">page1</a>- 我被发送到的链接变成http://domainname/#/page1- 但它加载正常。当尝试从page1访问page2页面时,问题变得很明显 - 当访问
<a href="page2">page2</a>- 我被发送到的链接变成http://domainname/#/page1/page2,最坏的情况应该是http://domainname/#/page2- Angular 将 URL 添加到现有 URL,作为一种子路由。其他页面以此类推 - URL 连接。
我认为这与 IE9 不支持 HTML5 推送/弹出这一事实有关,我猜 Angular 使用了它。我不确定,我是新手。据我所知,至少$locationProvider.html5Mode(true) 是 IE9 的问题所在。
我目前陷入困境,希望能在此问题上提供任何帮助。
编辑:下面的答案是一个可行的解决方案,经过进一步调查,我将接受它作为“已解决问题”的答案。如果您有同样的问题,请使用它。
【问题讨论】:
-
IE9 不支持历史 API,所以我认为您不会让 ti 以您喜欢的方式工作。 caniuse.com/#feat=history
-
这也是我的看法,但是 Angular 网站说它提供对 IE9 的支持,因此我猜测必须有另一种模式来配置 Angular。我可以检查浏览器历史 API 并根据支持进行切换,但我不熟悉将 Angular 配置为不使用历史 API 的方法,而无需更改所有链接的结构。
-
我在这里看到stackoverflow.com/questions/17829991/… 使用 window.location.hash = '/' 可能会有所帮助。值得一试吗?
-
@aCa 绝对值得一试。稍后会测试它,如果它可以工作,我会告诉你。谢谢!
-
@aca 不,使用提供的解决方案绝对没有变化。