簡體   English   中英

按下后退按鈕時如何使Firefox重新加載頁面?

[英]How do I make Firefox reload page when back button is pressed?

我嘗試過阻止頁面緩存的元標記的每個組合和排列,但Firefox STILL緩存頁面! 我只需要在用戶按下后退按鈕時重新加載URL。 在IE8中正常工作。

我嘗試了所有這些......

<meta http-equiv="Cache-Control" content="no-store" />
<meta http-equiv="Pragma" content="no-cache"/>
<meta http-equiv="Expires" content="-1"/>
<meta http-equiv="Expires" content="Sat, 1 Jan 2000 00:00:00 GMT" /> 

...而且我也試過以下JavaScript ......

<input type="hidden" id="refreshed" value="no"/>
<script type="text/javascript">

    onload=function(){
        var e=document.getElementById("refreshed");
        if(e.value=="no"){
            e.value="yes";
        }

        else{
            e.value="no";
            location.reload();
        }

    }

</script> 

......一切都無濟於事。 我在這里錯過了什么? 如果重要的話,頁面是用PHP生成的。

更新1:

到目前為止,我已經嘗試了所有的建議,但我仍然無法使其發揮作用。 當我使用Chris的PHP代碼時,我就像這樣使用它......

<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
<!--the rest of my page-->

..正如你所看到的那樣,它位於我的網頁的EXTREME頂部,在DOCTYPE標題之前。

我也嘗試過session_start()但即使在閱讀手冊后我也不確定我是否正確使用它。 我也把它放在我頁面的最頂端。

我對任何建議都持開放態度,這使得這項工作不會破壞其他頁面功能。 我知道我已經看到每次都使用后退按鈕重新加載的頁面,它們是如何做的?!

解決了!

事實證明我有多個問題對我不利,但通過盡職調查,我能夠消除這些問題並取得勝利。

克里斯將他的代碼更新為......

<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
echo time();
?><a href="http://google.com">aaaaaaaaaaaaa</a>

我發現他的代碼確實有效,當我使用它時,如果沒有其他的話,他的確如何使用它,但是當我把它放到我的頁面中時它沒有用。 我的所有頁面都是.php.html ,所有頁面都附加到DWT(動態Web模板),因此我使用Chris的代碼一次更新所有頁面。 我沒有意識到DWT在DOCTYPE標題之后開始正確,因此代碼從未插入到我的頁面中。 我找不到讓DWT包含DOCTYPE標頭的方法,所以我進入了所有頁面並手動插入DOCTYPE標頭上方的代碼。

接下來我發現,即使我的服務器被設置為將.htm.html解析為.php.html頁面也會在我插入Chris代碼的地方產生錯誤,說明“無法修改標題,標題有已被發送“。 我真的不在乎我的擴展是什么,所以我只是將我的.html擴展名更改為.php擴展名。

最后一個小麻煩是,即使頁面現在沒有被緩存(就像我想要的那樣),當用戶使用后退按鈕時(即如果用戶位於底部),Firefox將用戶放在上一頁的最后位置頁面a當他們導航到頁面b時,然后用戶使用頁面b上的后退按鈕,它們將返回到頁面a的底部,而不是頁面a的頂部。 修剪我原來的JavaScript修復了這個......

    <script type="text/javascript">

        onload=function(){
            document.getElementById('content').scrollTop=0;
        }

    </script>

即使這似乎涉及這么簡單的問題,我很高興它得到修復。 感謝大家的幫助(尤其是克里斯)。

這適合我

制作一個新的php文件。 我可以使用后退和前進按鈕,頁面上的數字始終更新

<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
echo time();
?><a href="http://google.com">aaaaaaaaaaaaa</a>

您可以在PHP頁面中添加以下PHP代碼。

CodeIgniter Framework version:
$this->output->set_header('Last-Modified:'.gmdate('D, d M Y H:i:s').'GMT');
$this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate');
$this->output->set_header('Cache-Control: post-check=0, pre-check=0',false);
$this->output->set_header('Pragma: no-cache');

PHP版本:

header('Last-Modified:'.gmdate('D, d M Y H:i:s').'GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0',false);
header('Pragma: no-cache');

您還可以在<head>部分的Login / Master Page中添加以下Java Script Code:

<script language="javascript" type="text/javascript">
    window.history.forward();
</script>

兼容性驗證

  • IE瀏覽器
  • 谷歌瀏覽器
  • 火狐瀏覽器
  • 歌劇

查看實時的http標題,當您按下后退按鈕時,您將看到沒有請求。 這是故意的,所以你不要放棄你在表格中輸入的內容。

編輯

一些關於專家交流的帖子表示這很有效,但是從2006年開始。

<META HTTP-EQUIV="Expires" CONTENT="0">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-store">

然后一個javascript刷新

<meta http-equiv="Cache-Control" content="no-cache" />

我認為正確的值是“無緩存”

session_cache_limiter('nocache');

這應該會自動生成所有必需的標頭。 請注意,某些瀏覽器(如Opera)在使用后退按鈕時仍會忽略這些瀏覽器。

編輯

相關標題如下,以防您想以其他方式生成它們:

Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

為什么? 我的意思是,你為什么要這樣做? 當我按下后退按鈕時,我想要瀏覽器提供的標准功能 - 返回上一頁。 我不想要一個驚喜。

如果要停止意外重新提交POST,可以通過使用重定向結束POST處理以使用GET顯示所需的回復來輕松完成。 稍后回到此頁面,將重新顯示重定向的GET(或從緩存重新加載它必須具有相同的結果)。 這是用戶期望的並且是無害的。

這樣做的另一個好處是,如果在更新數據庫時保存失敗,顯示屏將顯示數據庫中的內容,而不是變量中的內容。

你發表了評論:

這是因為一旦提交了表單,如果用戶按下后退按鈕,他們正在查看的信息將是不准確的。

如果你想要防止這種情況你做錯了! :)

您需要做的是在提交表單時進行重定向。

<?php
    // code that handles the form submit
    header("Location: http://www.example.com/form-success.html"); // needs the absolute url (You can use $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] and dirname() for this)
    exit; // prevents further execution of the php code when while doing to redirect
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM