IE9 和 angular 路由问题
IE9 and angular routing issues
这会有点长,但我希望能说清楚。请问我是否没有充分解释一个观点。
使用以下 structure/setup,我 h\got 一切都可以在除 IE9 之外的所有浏览器中运行。对于以下任何内容,我不需要提供支持;因此问题在于EI9。我没有使用 UI-路由器。
网站URLhttp://domainname
内部页面 link 1 <a href="page1">page1</a>
- 点击这里我会进入 http://domainname/page1
内部页面 link 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/#/
- /#/
被插入到 link - 我希望它消失,因为它会导致以下问题:
- 访问
<a href="page1">page1</a>
时 - 我收到的 link 变成了 http://domainname/#/page1
- 但加载正常。尝试从 page1
访问 page2
页面时,问题变得很明显
- 访问
<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
.
希望得到帮助。
这会有点长,但我希望能说清楚。请问我是否没有充分解释一个观点。
使用以下 structure/setup,我 h\got 一切都可以在除 IE9 之外的所有浏览器中运行。对于以下任何内容,我不需要提供支持;因此问题在于EI9。我没有使用 UI-路由器。
网站URL
http://domainname
内部页面 link 1
<a href="page1">page1</a>
- 点击这里我会进入http://domainname/page1
内部页面 link 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/#/
- /#/
被插入到 link - 我希望它消失,因为它会导致以下问题:
- 访问
<a href="page1">page1</a>
时 - 我收到的 link 变成了http://domainname/#/page1
- 但加载正常。尝试从page1
访问 - 访问
<a href="page2">page2</a>
时 - 我被发送到的 link 变成http://domainname/#/page1/page2
,最坏情况下应该是http://domainname/#/page2
- Angular 添加 URL 到现有的 URL,作为一种子路径。其他页面依此类推 - URL 连接。
page2
页面时,问题变得很明显
我认为这与 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
.
希望得到帮助。