文档准备表单提交和浏览器历史记录

时间:2014-07-09 11:57:22

标签: javascript jquery html forms browser-history

我的页面中有以下代码,以便在DOM准备就绪时自动在页面上提交表单:

$(function () {
    $('form').submit();
});

然而,在下一页上,如果用户在浏览器上单击返回,则会返回到此页面之前的页面而不是打开此代码的页面(无论如何都使用Chrome / IE)。即浏览器历史记录中缺少表单中包含表单的页面。

这很棒,虽然我想知道现在所有现代浏览器都能做到这一点吗? 我正在寻找一个答案,引用官方消息来源,例如互联网标准文件或浏览器供应商,说明他们实施的机制。

只有在DOM ready或Window加载事件中调用submit()函数时才会出现这种情况。

e.g。在点击页面(后退/前进)后,此代码将在浏览器历史记录中显示表单页面: -

document.addEventListener('click', function () { document.forms[0].submit(); }, false);

以下片段赢了: -

document.addEventListener('DOMContentLoaded', function () { document.forms[0].submit(); }, false);
window.addEventListener('load', function() { document.forms[0].submit(); }, false);
window.onload = function () { document.forms[0].submit(); };

4 个答案:

答案 0 :(得分:8)

我之前已经处理过这个问题。我不想要back button 用户返回上一页。使用onbeforeunload解决了问题 问题对我来说......

但您的问题与以下概念有关

  • 浏览上下文
  • 会话历史记录
  • 替换已启用(标记)

  1. A"浏览上下文"是一个环境,其中"文件"对象 呈现给用户。

  2. "文档"浏览上下文"的序列。是它的会议历史"。该 "会话历史"将这些" Document"列为平面条目。

  3. "更换已启用"当我们从一个" Document"传播时生效。在#34;会话历史"中的另一个。如果使用" Replacement Enabled"启动遍历,则会删除紧接在指定条目之前的条目(在"会话历史记录"中)。

  4.   

    注意 Web浏览器中的选项卡或窗口通常包含浏览上下文,iframe或框架集中的框架也是如此。


    从逻辑上思考,通过调用其中任何一个

    document.addEventListener( 'DOMContentLoaded', function() {document.forms[0].submit();}, false );
    window.addEventListener( 'load', function() {document.forms[0].submit();}, false );
    window.onload = function() {document.forms[0].submit();};
    

    建议浏览器执行#3,因为这些调用意味着什么 是加载后立即传播离开页面。甚至对我而言代码也是如此 显然:)要求从"会话历史"中清除。

    进一步阅读...

答案 1 :(得分:1)

由于此代码在回复click事件时会在历史记录中保留页面: -

document.addEventListener('click', function () { document.forms[0].submit(); }, false);

并且以下代码段不会将页面保留在历史记录中(DOMContentLoadedwindow onload个事件): -

document.addEventListener('DOMContentLoaded', function () { document.forms[0].submit(); }, false);
window.addEventListener('load', function() { document.forms[0].submit(); }, false);
window.onload = function () { document.forms[0].submit(); };

可以假设现代浏览器不会记录窗口加载或文档就绪处理程序中发生的页面导航的导航历史记录。

答案 2 :(得分:0)

当用户点击后退按钮时,浏览器会显示页面的缓存副本。表单提交不会缓存页面,因此它不会显示在您的历史记录中。

答案 3 :(得分:-1)

是的,从onload事件处理程序重定向会导致新URL替换您在历史记录中保留的URL(因此不会添加无用的条目)。但这并不是替换的唯一触发因素,也可能是由于任何位置变化发生得足够快,这种延迟旨在避免在基于JavaScript的重定向情况下污染历史记录。

很难找到关于该主题的任何规范,但在Firefox上这个延迟似乎是15秒。以下是其中一位moz开发人员在bugzilla中提到的这种延迟:

  

Mozilla使用15秒的阈值来决定页面是否应该   留在历史与否。如果网站使用和   在15秒内重定向到另一个站点或重定向到另一个站点   在onLoadHandler()等页面中,重定向的页面将被替换   (从而消除)重定向页面的历史记录。如果   重定向发生在15秒后,重定向页面保持不变   历史。

     

有人可能会争论   时限。但这只是我们认为合理的数字