为什么Firefox +我的代码会破坏FireFox刷新

时间:2010-05-31 11:47:53

标签: javascript ajax firefox post

我现在很生气。我失去了几个小时,我不知道为什么会这样。这是一个半咆哮,但我会尽量保持简短

  1. 即使刷新后,我的代码也无法正常工作
  2. 我修改了我的代码,所以我想,因为它在没有改变任何东西的情况下停止工作(你会认为我在想这个......)
  3. 我不知何故决定制作一个新的窗口或标签我运行我的代码并验证它是否有效。
  4. 我写了更多代码,看到一切再次破碎
  5. 我在一个新窗口中编写测试,看看我的代码是否正常工作
  6. 我看到我的代码无效,而firebug无法帮助
  7. 当我创建新标签时,我注意到一切正常
  8. 我意识到刷新不起作用,我必须为我的代码创建一个新选项卡。
  9. 然后我立即知道问题是什么。我修改了一个display:none textbox,但是我设置的值不正确。我看不到它,因为它是隐藏的。现在有些人可能会说我的错,因为在刷新时所有数据都可能是缓存。但这里是踢球者。我正在使用POST数据。我每次都在刷新之间发布。

    当缓存相同数据并使用时,使用POST是什么意思?如果搜索引擎没有机会关注block user获取链接,那么当安全性或重复性操作不成问题时,为什么我要打扰发帖? POST似乎没有做任何事情。

1 个答案:

答案 0 :(得分:5)

听起来像是被表格字段值记住了。

当你使用后退和前进时(但是当bfcache没有在拥有它的浏览器中使用时),或者在某些浏览器中,当你点击重新加载时,浏览器会尝试保留每个表单字段的值。页面上次卸载。这是一个功能,旨在允许用户导航和刷新表单,而不会丢失他们辛苦输入的所有数据。

因此,您不能依赖于页面加载时表单字段的值,因为它应该来自HTML源。如果您的DOM状态取决于表单字段的值(例如,根据另一个字段的值隐藏或禁用某些字段的表单),则必须在页面加载时更新该状态以反映浏览器静默放置到的字段值(不会发生onchange个事件)。并且根本不使用隐藏输入来存储脚本变量

确切的行为因浏览器而异。例如,某些浏览器会保留隐藏字段的值,而某些浏览器则不会。当字段被解析到DOM中时,Mozilla和WebKit立即将新值放入其中,而IE仅在window.onload上执行...而且Opera更加严重,仅在window.onload之后执行,因此您可以只能通过在onload之后设置0超时来更新状态来捕获它。这是一个令人讨厌的混乱。