2010-01-19 139 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'。每当任何链接或按钮被固定时,它将导致半透明的叠加层出现。通过浏览器的性质,它会等待,直到它获得新页面(标题)的响应。所以它不会消​​除当前页面,直到至少返回新页面的内容为止。一旦新页面开始出现,它会自动删除覆盖!