Internet Explorer使用jQuery Address在href中放入哈希值

时间:2012-12-12 19:40:03

标签: internet-explorer jquery pushstate jquery-address

我正在寻找一个好的pushstate jquery插件来处理ajax-json(当js关闭时php和#mod_rewrite)并找到了jQuery Address。我非常喜欢它,因为它有很好的文档记录并且易于使用。 (我从未真正弄清楚history.js)我注意到,伟大的互联网浏览器(9)在href字段中放置了哈希。它也在示例中执行:http://www.asual.com/jquery/address/samples/state/contact我已经测试了其他浏览器,但您只能通过优秀的Internet Explorer查看。有什么方法吗?

1 个答案:

答案 0 :(得分:6)

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

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

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

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

enter image description here

解析404

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

加载初始内容并设置jQuery.address后,甚至会在您的设置路径中进行新的导航。在您的情况下,这是/posters。遗憾的是,您没有RewriteRules来为/posters提供内容,因此最终结果是404.同样,此发生在IE9中IE9不支持历史记录界面。

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