【问题标题】:Refresh parent page刷新父页面
【发布时间】:2012-07-24 07:32:35
【问题描述】:

我有一段简单的代码,如果用户单击取消,那么他们将使用附加的代码返回到上一页。我想做的是,如果用户单击取消按钮,则刷新他们来自的页面。这可能吗?非常感谢

<input type="button" value="Cancel" onclick="history.go(-1);return false;" />

【问题讨论】:

  • 有什么区别?如果他们单击刷新,他们将返回到上一页,但您希望它“刷新他们来自的页面”不是一样吗?我不确定您是否正确使用了刷新一词。
  • @Celeritas 不完全一样,因为浏览器大多从缓存加载页面而不是从服务器加载,当然这取决于用户设置,但默认情况下它们从缓存加载
  • 嗨。不是不一样。当它们返回时,所有旧数据仍然存在。这就是为什么我需要刷新。谢谢

标签: javascript redirect


【解决方案1】:

您可以使用上一个答案中建议的meta 标记,也可以根据特定网址检查document.referrer 属性,然后通过javascript 手动刷新它。

编辑

在 1.html 中,您将拥有:

$(document).ready(function(){
    if(document.referrer.indexOf("files.php") != -1) {
        window.location.reload(true); // passing true as an argument causes page to being force loaded from the server
    }
});

在 2.html 中你只需要这个:

<input type="button" value="Cancel" onclick="history.go(-1);return false;" />

【讨论】:

  • 我不确定我的编码是否正确,因为它不起作用。单击按钮时,没有任何反应。 谢谢
  • 你不应该把它放在按钮点击上,而是放在页面的 document.load 事件中你想要重新加载的内容,如果你使用 jQuery,它看起来像:$(document).ready(function(){ // and the code from above });
  • 比较时也使用整个 URL,不仅是 files.php 部分,或者如果 document.referrer 包含或以 files.php 结尾但不等于,则可以,因为它将返回一个绝对 URL
  • 我没有使用 Jquery。所以我把它放在函数中,并把它称为 onclick 事件:GoBack();还是什么都没有。
  • 如果你不使用jQuery,那么看看这个帖子:stackoverflow.com/questions/1235985/…并在第一页添加一个事件listernet
【解决方案2】:

window.parent.document.location.reload();我认为可以与 jQuery 一起使用。为后退按钮设置绑定。

或者扔掉这个

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">

在第一页的头部,所以它会过期并自动刷新

但是我不能 100% 确定它可以与 Firefox 一起使用。它似乎与 IE。

我认为你也可以通过设置 rel = external 来打开没有 AJAX 的页面

<a href="../index.html" data-icon="grid"
class="ui-btn-right" rel="external">Home</a>

这是一种老派的做法。

还有This is a very useful link explaining how jquery can accomplish this in most browsers。可能是一个更优化的解决方案,而不是我的技巧。

【讨论】:

  • window.parent.document.location.reload(); 不是解决方案,因为这里操作发生在同一个窗口中,当您返回历史记录时,窗口对象是相同的,因此您无法访问窗口对象以前打开的页面,无论如何 +1 meta 标签
  • 但谁说他使用 AJAX?我会说他绝对不使用 AJAX,因为他谈到 history.go(-1)
  • @Bob。元代码不起作用。此外,没有 AJAX。谢谢
  • 您尝试使用哪个浏览器。你把那个元代码放在你的 html 中对吗?
  • @Bob。我试过火狐,铬,ie8。我把代码放在头部分。谢谢
【解决方案3】:

另一种可能性是,如果您只关心从您的网站重新加载页面,您可以强制不进行缓存。如果你有兴趣see here

【讨论】:

  • 甚至尝试过:response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1。 response.setHeader("Pragma", "no-cache"); // HTTP 1.0。 response.setDateHeader("过期", 0); // 代理。还是不行。
  • 你在他们来自的页面上试过了吗?不是将他们送回的页面。我很惊讶它没有工作,但如果你让它以不同的方式工作,没关系。
猜你喜欢
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
相关资源
最近更新 更多