有一段12行的JavaScript代码,可以让Firefox、Chrome、Safari浏览器崩溃,而且还能让iPhone重启、安卓闪退,本文作者对这12行代码进行了分析解读并且提出了相应的防御办法,欢迎大家一同探讨。 Ajax即“Asynchronous Javascript And XML”(异步JavaScript和XML),是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新无刷新操作。 但是,Ajax应用也会造成另外的问题,容易导致浏览器无法前进与后退,这是个很头疼的问题,开发人员必须增加工作量(比如通过一个隐藏的iframe,或者改变location.hash值等方法)来解决。 为了解决传统Ajax带来的问题,HTML5里引入了新的API:history.pushState,它和Ajax结合后,有个新的称呼是pjax。是一种基于Ajax history.pushState的新技术,该技术可以无刷新改变页面的内容,并且可以改变页面的URL。pjax是Ajax pushState的封装,同时支持本地存储、动画等多种功能。目前支持jquery、qwrap、kissy等多种版本。 HTML5.history.pushStateHTML5可以通过pushState和replaceState接口操作浏览器历史,并且改变当前页面的URL。 pushState是将指定的URL添加到浏览器历史里,存储当前历史记录点。replaceState是将指定的URL替换当前的URL。同时,这些方法会和window.onpostate事件一起工作。 history.pushState(data, title, url):往历史记录堆栈顶部添加一条记录;data会在onpopstate事件触发时作为参数传递过去;title为页面标题,当前所有浏览器一般都会 忽略此参数;URL为页面地址,可选,缺省为当前页地址。具体细节: state:对象是一个JavaScript状态对象,记录历史记录点的额外对象,可以为空。它关系到由pushState()方法创建出来的新的history实体。用以存储关于你所要插入到历史记录的条目的相关信息。 title:所有浏览器一般都会 忽略此参数,虽然它可能将来会被使用上。而现在最安全的使用方式是传一个空字符串,以防止将来的修改,或者可以传一个简短的标题来表示state。 URL:这个参数用来传递新的history实体的URL,新的URL必须和现有的URL同域,否则pushState()将抛出异常。这个参数是选填的,如果为空,则会被置为document当前的URL。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|