【问题标题】:IE9 and angular routing issuesIE9 和角度路由问题
【发布时间】:2015-03-25 13:21:46
【问题描述】:

这会有点长,但我希望让自己清楚。请问我是否解释得不够好。

使用以下结构/设置,我可以在除 IE9 之外的所有浏览器中运行所有内容。对于以下任何内容,我不需要提供支持;因此问题在于EI9。我没有使用 UI 路由器。

  1. 网站网址http://domainname

  2. 内部页面链接 1 <a href="page1">page1</a> - 单击此链接应将我转到 http://domainname/page1

  3. 内部页面链接 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/#/ - /#/ 被插入到链接中 - 我希望它消失,因为它会导致以下问题:

  1. 当访问<a href="page1">page1</a> - 我被发送到的链接变成http://domainname/#/page1 - 但它加载正常。当尝试从page1 访问page2 页面时,问题变得很明显
  2. 当访问<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 不,使用提供的解决方案绝对没有变化。

标签: angularjs angular-routing


【解决方案1】:

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

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

我也为这个issue在github上创建了一个repo(其实是无限$digest issue的问题,但是路由还是可以的,见#9235)。你可以测试这个sample。在这个示例中,我设置了<base href="/app/" />,因为基本网址是app

希望帮助。

【讨论】:

  • 我会说一半。 ie9 中的 URL 问题中仍然存在 #/。对于缺乏更好的替代方案,这是一个可行的解决方案。当我有时间进一步调查时,会回到这个话题。感谢您的帮助,现在,请投票:)
  • @RaduAndrei 谢谢。添加哈希不是问题,路由可以正常工作。问题是可能会消耗资源的无限摘要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-10
  • 2014-06-22
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 2017-04-06
  • 2021-11-12
相关资源
最近更新 更多