Internet Explorer 使用 jQuery 地址将哈希值放入 href

Posted

技术标签:

【中文标题】Internet Explorer 使用 jQuery 地址将哈希值放入 href【英文标题】:Internet Explorer puts hashes in href with jQuery Address 【发布时间】:2012-11-30 14:28:24 【问题描述】:

我正在寻找一个好的 pushstate jquery 插件来使用 ajax-json(以及 php 的 mod_rewrite 当 js 关闭时)并找到 jQuery 地址。我非常喜欢它,因为它有据可查且易于使用。 (我从来没有真正弄清楚history.js)但是我注意到伟大的Internet Explorer(9)将哈希放在href字段中。在示例中也是如此:http://www.asual.com/jquery/address/samples/state/contact 我已经测试过其他浏览器,但您只能通过出色的 Internet Explorer 看到这一点。有什么办法吗?

【问题讨论】:

【参考方案1】:

Internet Explorer 9 doesn't support 历史 API。相反,使用这些 api 的应用程序必须回退到 onhashchange 功能,该功能利用位置的片段在功能较弱的浏览器中复制类似的功能。

您所看到的是预期的; Internet Explorer 10+ supports this newer functionality,因此不需要在 URL 中添加 /# 来记录和保存状态历史。 Internet Explorer 9 不支持 History API,因此必须做出规定。

您提到了 history.js,它将对 history.pushState 等方法的支持扩展到非 html5 浏览器。在这个项目GitHub page 中,您可以看到一些示例,说明 url 在新浏览器中的显示方式以及它们在旧浏览器中的显示方式。正如预期的那样,您现在遇到的模式也是在那里产生的。

虽然在 Internet Explorer 9 中查看时,您的 url 中有一个片段,但请注意,这并不反映您服务器上请求的路径。请注意在浏览器中输入的请求地址,以及“网络”选项卡中对服务器的实际请求:

解决 404

您在 IE9 中获得 404 的原因是因为在不支持 HTML5 History API 的浏览器中,jQuery.address 将重新导航到您在设置中提供的任何状态。因此,当您输入 url 时,初始请求会传递给您的服务器。此地址由 mod_rewrite 处理,您的 RewriteRules 确定要加载的初始内容。

当您的初始内容被加载并设置 jQuery.address 时,甚至会在您的设置路径中发生新的导航。在你的情况下,这是/posters。不幸的是,您没有任何 RewriteRules 可以向 /posters 提供内容,因此最终结果是 404。同样,这发生在 IE9 中,因为 IE9 不支持历史界面。

这可以通过再次访问 F12 开发人员工具的网络选项卡并捕获数据来确认。打开该选项卡后,按“开始捕获”,然后输入购物车中产品的完整路径。您会注意到对该完整路径的初始请求,然后加载了几个依赖项。不久之后,您将看到另一个导航事件发生在您在$.address.state 中提供的任何路径。

【讨论】:

以上是关于Internet Explorer 使用 jQuery 地址将哈希值放入 href的主要内容,如果未能解决你的问题,请参考以下文章

html Internet Explorer支持使用条件注释。以下代码段在旧版Internet Explorer中添加了HTML5和CSS3支持

html Internet Explorer支持使用条件注释。以下代码段在旧版Internet Explorer中添加了HTML5和CSS3支持

html Internet Explorer支持使用条件注释。以下代码段在旧版Internet Explorer中添加了HTML5和CSS3支持

在同一台计算机上运行 Internet Explorer 6、Internet Explorer 7 和 Internet Explorer 8

html 使用HTML检测Internet Explorer

html 使用HTML检测Internet Explorer