2014-07-11 44 views
2

我有两个网页:index.php文件和handler.php index.php文件有一个形式,即提交给handler.php这样的:插入浏览器的历史记录条目

handler.php ?输入= +一些数据

我的目标是让浏览器的后退按钮需要我index.php?input=some+data而不是简单地index.php做一些事情。我怎样才能做到这一点?理想情况下,我宁愿使用PHP的,而不是JS把尽可能多的做尽可能

解决方案: 我补充提交处理程序,这是否:

function onFormUpdate() 
{ 
    window.history.replaceState({} , '', 'index.php?' + document.forms[0].serialize()); 
} 

这种方式,形式将不会从提交index.php,但是从index.php?input=some+data。也就是说,后退按钮会让我回到index.php?input=some+data

+0

我不认为修改历史是可能的。您可以考虑在提交表单之前使用网址的哈希(#)(例如)。 – Nicolas

+0

等待,当您返回发送该数据的页面时,是否希望将数据发送到index.php? – Max

+0

@Max是的,这正是我想要它做的。尝试返回到index.php时,应该将相同的数据发送到index.php。尼古拉斯:我不需要修改历史,我需要*制作历史。例如,我可以将表单提交给index.php,然后用相同的URL参数重定向到handler.php。这样,后退按钮会让我回到'index.php?input = some + data' ...这里的问题是,当我真正去index.php?input = some + data时,它会将我重定向到处理程序。 php?input = some + data – Pavel

回答

0

你可以这样做:(JS)

history.replaceState({}, '', 'index.php?input=some+data'); 

提交之前。

但我不认为你需要这样做,我的浏览器(firefox,尽管我认为chrome会这样做)在提交前保存表单数据,所以当我从处理程序返回时,表单仍然有输入。

+0

我会试试。在FF中,我用来保存表单,然后在更新FF之后的某个时候,它停止工作,表单数据现在被重置。 Chrome保留它...但目标实际上是为了获得index.php?input = some + data在真实历史记录中,以便我可以返回并复制该链接。所以它不仅仅是保存表单数据。 – Pavel

+0

已验证,它确实是我想要的。 'onsubmit =“history.replaceState({},'','index.php?'+ document.forms [0] .serialize());”' – Pavel