2011-02-28 69 views
7

我在网上搜索了很多以摆脱这个问题,但无法找到具体的解决方案,尽管以前详细讨论过该问题。IFrame后退按钮

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

这种行为真的很烦人,而且我很难解决这个问题。

我正在使用firefox。

期待回复。请告知我是否应该提供更多详情。

感谢,

回答

3

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

+0

同意这一点,任何更改回的这种行为会相当混淆用户。 –

+0

我将提供更多的上下文:脚本是在公共领域网站上工作的扩展的一部分。我已经有一个“返回上一页”链接,但我仍然希望后退按钮的功能,因为我在我的文章中写道。我不知何故想从浏览器历史记录中分离或删除Iframe历史记录,但我不确定我能否做到这一点? – VJune

+0

您可以这样做的唯一方法是使用AJAX将表单值发布到服务器。通过这种方式,您可以避免发布帖子,并且后退按钮可以将您带到上一页。但是这涉及到大量的JavaScript编码来将数据发布到服务器,然后在获得有效响应后隐藏表单域。使用jQuery for Ajax可以让你更轻松一些。但是我怀疑你是否可以删除浏览器历史记录。 – Arun

3

Firefox和IE确实像你提到的,而Chrome不这样做,我猜其他WebKit浏览器会做同样的。 在Chrome中,单击后退按钮会将您带到您想要去的位置(前一个父框架的URL)。即Chrome在后退按钮历史记录中不添加iframe网址更改。

不幸的是,我发现没有办法强制IE和FF来复制这个,所以我使用了Arun上面建议的AJAX post方法。

这里是我的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中动态加载的初始表单。

3

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

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

您可以在此自己在IE9观察:

  1. 打开返回按钮菜单(右键单击后退按钮):你只需要在当前页面
  2. 按在iframe提交一个条目= >后退按钮菜单显示的iframe
  3. 从DOM中删除的iframe一个额外名额=>后退按钮菜单不再显示该条目
+0

也测试过在IE8和Firefox 10上工作。 –

+0

我碰到过这个问题,并且为了更细化这个答案,我发现如果我没有指定iframe的src,直到加载父页面之后,奇怪的后面行为不会发生。 –