当人们单击“返回”按钮时,如何防止浏览器执行某些JavaScript?

时间:2015-06-07 00:36:35

标签: javascript jquery html ajax

服务器返回一个页面,该页面有一个隐藏的输入,其中包含一些用于未来AJAX请求的一次性CSRF令牌。 .onload处理程序解析这些令牌并删除<input>。当此人导航到外部网站然后使用“后退”按钮返回上一页时,会出现问题。浏览器使用页面的缓存版本,其中包含带有令牌的<input>,这些令牌可能已经用完了。在提出请求之前,我无法检查它。

是否有一种可靠的方法,将一些数据传递给JavaScript变量,即使用户单击“返回”按钮进入页面,也只能保证执行一次?

我能想到的唯一解决方案是在页面加载时异步请求这些令牌,但是当一大块压缩内容是大量的短字符串时,对服务器进行往返是没有意义的。无论如何都要发送给用户。

2 个答案:

答案 0 :(得分:1)

您可以使用localStorage并在其中放置一个标志,但旧浏览器可能存在兼容性问题。

本地存储:http://www.w3schools.com/html/html5_webstorage.asp

但你能做的最好就是按照你的说法询问服务器,发送短字符串并没有错,热门网站一直这样做。

答案 1 :(得分:1)

您可以尝试使用隐藏的form,因为浏览器会保留表单数据,然后使用js来嗅探表单以检查页面是否“脏”。

这个答案中有一个很好的例子:https://stackoverflow.com/a/5642600/1759514