2010-01-19 134 views
2

我有一個問題,在渲染新頁面時,屏幕在重定向時白屏一毫秒。屏幕閃爍在Response.redirect

這會導致屏幕閃爍並使我惱火。

我在網上有一些小片子,發現這個IE瀏覽器的解決方案適用於IE,但它不適用於Chrome或FireFox。

<meta http-equiv="Page-Enter" content="blendTrans(Duration=0.0)" /> 
<meta http-equiv="Page-Exit" content="blendTrans(Duration=0.0)" /> 

另外我確定使用這種方法會對更新面板和Ajax控件產生一些影響。

有沒有一種方法可以讓服務器在給予客戶端之前呈現整個頁面,以避免讓白色毫秒適用於所有瀏覽器。

任何想法都會受到歡迎。

+0

你能用javascript嗎?也許。不過,它會減慢重定向速度。 – Pindatjuh 2010-01-19 16:03:01

+0

我不認爲這會工作,可悲的是重定向是由按鈕點擊或選擇gridview行觸發的。 – Paul 2010-01-19 16:23:38

+1

你怎麼能接受一個答案,說你根本無法做到這一點,而不是我的 - 這給了你三種有效的方法? – 2010-01-28 16:29:58

回答

2

是否有設置服務器給它的客戶端

簡短的回答之前,使整個頁面的方法:沒有。這就是網絡瀏覽器的工作原理。即使使用盡可能最快的服務器(使用靜態緩存頁面進行描述),您只會減少平均「白色」時間,而不是一起消除它們。就像你在IE中看到的那樣,默認的頁面轉換是瀏覽器代碼的一部分,而不是服務器端控制的東西。如果你編寫你自己的瀏覽器,你可以寫它來洗黑,洗白,或保持轉換,直到整個頁面加載,就像IE一樣。

其他人提到,縮小頁面大小會減少「白色」時間。這次不僅是服務器生成頁面的時間,還包括頁面,圖像,JavaScript,CSS等所有網絡旅行時間,這就是爲什麼你永遠無法完全擺脫它 - 只能使用瀏覽器隱藏它招數。

我不是在談論「客戶端」的任何事情。這將無法正常工作。當瀏覽器決定對畫布進行白色清洗時,「客戶端」代碼甚至不會被下載,更不用說運行了。這是大家習以爲常的「互聯網」標準的一部分;它的設計不是幻燈片瀏覽器或圖形完美的渲染器。不幸的是,如果你關心轉換的話,HTML可能不適合你的工作。

1

默認情況下,服務器將在發送完整響應之前緩衝該響應。 「白色」將會是HTML內容可能與其大小相關的結果。使用諸如firebug或IE Developer Tools(我的首選項是Fiddler)的工具來檢查生成的內容。猜測你有一些非常大的ViewState。

+0

視圖狀態似乎沒有影響到這一些頁面有一行一些有十個。 – Paul 2010-01-19 16:13:17

+1

@Paul:好的,是什麼讓這種閃爍不同於我們在使用瀏覽器時所能容忍的普通Web導航閃爍? – AnthonyWJones 2010-01-19 16:35:34

2

MSDN的例子建議呼籲

Response.Redirect("http://www.mydomain.com/default.aspx"); 

你也可以嘗試使用

Server.Transfer("default.aspx", true); 
+0

可悲的是,以上都解決了這個問題 – Paul 2010-01-19 16:18:26

+1

閱讀http://stackoverflow.com/questions/224569/server-transfer-vs-response-redirect人們會認爲Server.Transfer應該解決瀏覽器的任何問題。 – Filburt 2010-01-19 17:26:52

+0

要添加到Filburt的評論中,當您使用Server.Transfer時根本不會發生重定向,所以由於重定向而不可能發生閃爍。 – 2010-01-25 21:06:47

0

可能是最好做在客戶端之前設置

Response.BufferOutput 

。例如,您可以擁有一個覆蓋整個頁面的div,並在DOM完全放在一起後淡出。在jQuery中,像這樣:

$(document).ready(function() { $('#overlay').fadeOut(); }); 

從UX的角度來看,雖然它可能有點令人不安。我其實更喜歡一點閃爍,所以我知道事情正在發生。

+0

不錯的建議,但這將覆蓋純色頁面,看起來比fliker更陌生,我正在努力實現頁面之間無縫流動。不斷變化的內容將表明事物的變化。 – Paul 2010-01-19 16:20:58

2

你看到的是正常現象。以下是在重定向期間發生的情況:

  • 服務器向瀏覽器發送響應(重定向在客戶端完成)。
  • 瀏覽器加載的響應,看到有一個重定向並停止頁面加載
  • 瀏覽器加載新頁面

您正在使用的meta標籤僅是IE瀏覽器,而不會影響任何其他瀏覽器。這將消除閃爍一起的唯一的東西會是下列之一:

  1. 你說,當用戶點擊一個按鈕或在網格行或某事發生的重定向。如果這將觸發location.href而不是post-back的更改,那麼用戶不會看到瀏覽器閃爍。

  2. 使用Server.Transfer(這將導致瀏覽器的地址欄顯示舊頁面而不是新頁面(重定向將改變地址欄)。這隻有在您將用戶重定向到同一臺服務器。

  3. 發送HTTP 301響應(永久移動)。學校將消除閃爍,但使用此方法時要小心。它具有其他效果(這可能會影響搜索引擎排名)。

要做#3,請在服務器上使用此代碼。

Response.StatusCode = 301; 
Response.StatusDescription = "Moved Permanently"; 
Response.AddHeader("Location", "NewLocation.aspx"); 
+0

+1 ...我的恥辱,你的回答沒有被接受。 – Filburt 2010-01-29 08:09:02

1

對不起,晚會晚了!我一直在我的應用程序上苦苦掙扎。我設計的解決方案適用於我。這架

<div id="overlayContent" class="overlay"> 
    <div id="loaderContent" class="loader"> 
     Loading... 
    </div> 
</div> 
  1. CSS:非常喜歡什麼@ Pike65建議...

    1. 用於覆蓋創建座
    .overlay { 
        position: fixed;  
        border: 0; margin: 0; padding: 0; 
        height: 100%; width: 100%; 
        top: 0; left: 0; 
        background-color: #272727; 
        text-align: center; vertical-align: middle; 
        z-index: 900; display: none; 
        -moz-opacity: 0.1; opacity: 0.1; 
        filter: alpha(opacity=10); 
    } 
    
    .overlay .loader { 
        position: relative; 
        width:40%; 
        margin: 20% auto; 
        padding: 10px; 
        background-color:black; 
        border: solid 1px gray; 
        color: #cccccc; 
        font-weight: bold; 
    } 
    
    1. 的Javascript(jQuery的):
    $('a, input[type=button]').live("click", function (e) { 
        $("#overlay").show().css({ opacity: 0.1 }).fadeTo(UxSpeed, 0.8); 
    }); 
    

    就是這樣。您可以根據自己的喜好修改'js'。每當任何鏈接或按鈕被固定時,它將導致半透明的疊加層出現。通過瀏覽器的性質,它會等待,直到它獲得新頁面(標題)的響應。所以它不會消​​除當前頁面,直到至少返回新頁面的內容爲止。一旦新頁面開始出現,它會自動刪除覆蓋!