我正在寻找一个好的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查看。有什么方法吗?
答案 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中查看时,网址中有一个片段,但请注意,这并不反映服务器上请求的路径。请注意在浏览器中输入的请求地址,以及网络选项卡中对服务器的实际请求:
您在IE9中获得404的原因是因为在不支持HTML5 History API的浏览器中,jQuery.address将重新导航到您在设置中提供的任何状态。因此,当您输入网址时,会有一个初始请求传递给您的服务器。此地址由mod_rewrite处理,您的RewriteRules
确定要加载的初始内容。
加载初始内容并设置jQuery.address后,甚至会在您的设置路径中进行新的导航。在您的情况下,这是/posters
。遗憾的是,您没有RewriteRules
来为/posters
提供内容,因此最终结果是404.同样,此仅发生在IE9中IE9不支持历史记录界面。
这可以通过再次访问F12开发人员工具的网络选项卡并捕获数据来确认。打开该选项卡后,按"开始捕获",然后键入购物车上产品的完整路径。您将注意到对该完整路径的初始请求,然后加载了几个依赖项。不久之后,您将看到另一个导航事件发生在$.address.state
中提供的任何路径上。