繁体   English   中英

文档就绪表单提交和浏览器历史记录

[英]Document ready form submission and browser history

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

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

但是,如果用户点击回到他们的浏览器的下一个页面上就可以追溯到页面这一个,而不是(反正有镀铬/ IE),此代码的页面之前。 即浏览器历史记录中缺少包含表单的页面。

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

这似乎只有在DOM ready或Window load事件中调用submit()函数时才会发生。

例如,此代码将在单击页面(后退/前进)后显示浏览器历史记录中的表单页面: -

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(); };

我以前处理过这个问题。 我不希望back button将用户带回上一页。 使用onbeforeunload为我解决了这个问题......

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

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

  1. “浏览上下文”是向用户呈现“文档”对象的环境。

  2. “浏览上下文”中的“文档”序列是其“会话历史”。 “会话历史记录”将这些“文档”列为平面条目。

  3. 当我们在“会话历史”中从一个“文档”传播到另一个“文档”时,“替换已启用”生效。 如果通过“Replacement Enabled”启动遍历,则删除紧接在指定条目之前的条目(在“会话历史记录”中)。

注意 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 ,因为这些调用意味着它一加载就会从页面传播开来。 即使对我来说代码显然是:)要求从“会话历史”中清除。

进一步阅读......

由于此代码在响应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(); };

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

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

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

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

Mozilla使用15秒的阈值来确定页面是否应保留在历史记录中。 如果站点在15秒内使用并重定向到另一个站点,或者重定向到onLoadHandler()等中的另一个页面,则重定向的页面将替换(从而消除)历史记录中的重定向页面。 如果重定向在15秒后发生,则重定向页面将保留在历史记录中。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM