开发者问题收集

IFrame 后退按钮

2011-02-28
8491

我在网上搜索了很多方法来解决此问题,但尽管之前详细讨论了此问题,却找不到具体的解决方案。

查询很简单。我的 javascript 动态地将一个 iframe 添加到网页(显示反馈表单)。问题是,“回答后”,现在当用户单击浏览器的后退按钮时,iframe 而不是浏览器窗口会受到影响,即再次显示问卷。我希望浏览器后退按钮正常运行。

此行为真的很烦人,我很难修复它。

我正在使用 Firefox。

期待回复。如果我需要提供更多详细信息,请通知我。

谢谢,

3个回答

您的表单有一个提交按钮,用于将页面发布到服务器。无论您是否使用 iframe,后退按钮都会始终将用户发送回表单。理想的方式是通知用户操作已完成,在这种情况下,感谢用户的反馈(使用警告框)并将用户重定向到主页或在页面中提供“返回主页”按钮。

Arun
2011-02-28

Firefox 和 IE 确实像您提到的那样,但 Chrome 却不是这样,我猜其他 WebKit 浏览器也会这样做。 在 Chrome 中,单击“后退”按钮将带您到达您想要去的地方(父框架的上一个 URL)。即 Chrome 不会在后退按钮历史记录中添加 iframe URL 更改。

遗憾的是,我找不到强制 IE 和 FF 复制此操作的方法,因此我使用了 Arun 上面建议的 AJAX 发布方法。

这是我的 iframe 源代码,它使用 jQuery 发布表单,并用该 POST 的结果替换整个页面:

<form method="post" onsubmit="postForm(this);return false">
  ...
</form>

<script type="text/javascript">
function postForm(form) {
    $.post(form.action, $(form).serialize(), postCompleted);
}
function postCompleted(data) {
    $('html').html(data);
}
</script>

这适用于所有浏览器;单击“后退”按钮将带您返回到最终用户看到的上一个 URL,而不是在 iframe 中动态加载的初始表单。

Guillaume Boudreau
2011-05-19

我遇到了同样的问题:我使用动态创建的 iframe 在我的页面上显示“弹出窗口”,其 SRC 指向另一个具有表单和提交按钮的页面。提交该页面后,使用 JS 回调隐藏 iframe。正如您所解释的,这会导致将新条目添加到历史记录中(至少在 IE 上)。

但我发现 从 DOM 中删除 iframe 元素(而不是隐藏它)会导致不需要的历史记录条目被删除 (在 IE9 上测试)!这正是用户在这种情况下所期望的。

您可以在 IE9 上自己观察这一点:

  1. 打开后退按钮菜单(右键单击后退按钮):当前页面只有一个条目
  2. 在 iframe 中按提交 => 后退按钮菜单显示 iframe 的一个额外条目
  3. 从 DOM 中删除 iframe =>返回按钮菜单不再显示该条目
Gyum Fox
2012-05-23