为什么 Firefox 从 HTML 表单中删除/忽略隐藏的输入值?

Why is Firefox removing / ignoring hidden input values from an HTML form?

我有一个 HTML 表单,它使用隐藏的输入来管理 PHP 处理脚本中的行为。

在浏览器测试中,我发现该表单在 Chrome 和 IE 中完美运行,但在 Firefox 中存在问题。

Firefox 浏览器(使用 39.0)删除了隐藏的输入值。他们完全消失了,只剩下 value=""。这反过来又弄乱了我的 PHP.

我广泛搜索了有关此问题的信息,但一无所获。

为什么 Firefox 删除(或忽略)我的 HTML 表单中隐藏的输入值?

在原始文件中

在 Chrome 开发者工具中

在 Firefox 检查器中

更新(基于发表的评论)

浏览器测试。该表单已经在所有主要浏览器(包括桌面版和移动版)上进行了测试。该表单适用于所有浏览器(包括 Firefox 移动版),但无法在 Firefox 桌面版 (39.0) 中完全运行,因为隐藏的输入值已被删除。

更新 2

重新启动并重新安装 Firefox 未能解决问题。

更新 3

已删除所有客户端脚本并检查HTML 验证(无错误)。问题仍然存在。

更新 4

这似乎是一个与 Firefox 缓存数据和处理 POST 请求的方式有关的问题。

当我 "Clear All History"(包括 cookie、缓存等)时,表单按预期工作...一次。

在所有后续提交中,value 属性具有空值,并且没有数据传递给 PHP,直到我再次 "Clear All History"。

其他浏览器不会出现这种情况。

我遇到了完全相同的问题。没有使用客户端脚本。我将隐藏字段嵌套在 div 中,然后一切正常。

这有效:

<div>
<input type="hidden" value="<?=($_SESSION['CSRF-TOKEN'] ?? 'token')?>"name="_token">
</div>

这完全复制了 post 中描述的行为:

<input type="hidden" value="<?=($_SESSION['CSRF-TOKEN'] ?? 'token')?>"name="_token">

以上任一变体都适用于 Chrome。问题仅出现在桌面 Firefox 63.0.1(64 位)上。

更新(2018-11-15) 实际上,在我的情况下,问题是 HTML 格式错误(name 属性之前没有 space)。看来 Chrome 对此容忍度很高,而 Firefox 则不那么容忍。 Firefox 提交一次该值,除非缓存被清除,否则不会再次提交。更正 HTML 更正了 Firefox 遇到的这种古怪行为。更正 HTML:

<input type="hidden" value="<?=($_SESSION['CSRF-TOKEN'] ?? 'token')?>" name="_token">