【问题标题】:Redirecting to a URL, IE 8 Ignores Fragment重定向到 URL,IE 8 忽略片段
【发布时间】:2012-07-11 09:05:04
【问题描述】:

我有一个 MVC 3 项目,它大量使用片段来动态加载不同页面的内容。有些页面会发回控制器以上传文件。上传完成后,我想将用户重定向回他们来自的页面。我将返回 URL 传递给上传操作,然后在上传完成后将用户重定向回该页面。

这在 Chrome 和 Firefox 中可以正常工作,但 IE 会忽略该片段,我会在我的解决方案中返回到根页面。下面是我用来重定向用户的代码。

public virtual ActionResult UploadFile(string returnURL)
{
    // Do some work here...
    return Redirect(returnURL);
}

有什么方法可以强制 IE 8 保留片段并像 Chrome 和 Firefox 一样运行?

如果没有,是否有解决此问题的标准方法?

我还查看了 Eric Law 关于 https 重定向和片段的 article。它提供了一些关于不同浏览器如何处理片段的见解。

【问题讨论】:

  • (1)当你被重定向回来时,IE地址栏中的url是否包含你的fragment,以及(2)你能显示使用fragment进行导航的客户端代码吗?
  • (1) 不,IE 不会在重定向后的 URL 中显示片段。 (2) 客户端代码似乎无关紧要。如果我重定向到带有片段的 stackoverflow url,IE 会丢弃片段,但 Chrome 和 Firefox 会保留它。

标签: c# asp.net-mvc-3 internet-explorer redirect fragment-identifier


【解决方案1】:

你可能会在这个问题上大吃一惊。 URL 片段对 URL 唯一性不重要,例如在决定是否将页面添加到浏览器缓存或将 URL 添加到浏览器导航历史记录时。

URL 查询包含在 URL 唯一性分类中,但片段不包含。

可能是 IE8 正在重定向到带有片段的 URL,但它正在从浏览器缓存加载根页面(没有片段),因为片段对于 URL 缓存等效性测试并不重要。

测试该理论的一种蛮力方法可能是清除浏览器缓存并将所有页面标记为服务器上的无缓存,看看这是否会改变 IE8 的行为。如果 IE8 在页面不在浏览器缓存中的情况下重定向到具有完整片段的所需页面,那么这将证实该理论。这只是一个测试场景,不是生产部署的解决方案。

【讨论】:

  • 不幸的是,no-cache 设置并没有影响行为。
【解决方案2】:

我已经构建了一个小应用程序来重现它。它在 IE9 和 Chrome 中按预期工作。

我有两个建议给你:

  • 如果是缓存问题,在 URL 中添加时间戳可能会有所帮助。尝试构建这样的 URL:

http://localhost:50173/Sample/?timestamp=26.07.2012%2021:11:00#myLocation

  • 如果它不起作用,解决方法可能是在最后呈现一个 javascript,它将导航:

window.location = window.location + "#myLocation";

【讨论】:

  • 我同意 IE9 和 Chrome 工作,不幸的是,我必须处理 IE 8,这似乎有问题。我无法在我的 js 中对片段进行硬编码,因为它是动态的,基于用户试图点击的页面。一个用例是用户访问了一个 URL,但他们的会话超时,他们需要重新登录。重新登录后,我想将他们带回到他们所在的页面。
猜你喜欢
  • 2013-02-04
  • 2011-12-18
  • 1970-01-01
  • 2020-11-05
  • 2014-10-16
  • 2017-12-30
  • 2011-01-18
  • 2014-04-12
  • 2019-09-09
相关资源
最近更新 更多