描述:
往往打开一个网页是有一个过程的,即,网页是一点一点地打开,特别是在网速慢的时候,经常要等好一阵子网页的内容才能全部呈现出来。问题:
由于特定的目的,我需要通过Http代理服务器实现这样一个功能:代理将用户所请求的网页内容(包括文字,图片,css,javascript等等等等)发送给客户端浏览器后,能够先不显示, 取而代之的是显示一个加载进度条之类的网页,等内容都加载完毕了,进度条变成一个“进入”按钮,点击这个按钮显示所请求的网页。这样的需求能搞定吗?是否可以在代理端修改所请求网页中的javascript脚本,来达到不显示的目的?又该如何实现进度条变按钮呢?Help!!!!!

解决方案 »

  1.   

    dreamweaver自己就带了这样的javascript的~~~
    一种可以预加载图片的js~~不过这个js并不知道是否加载完毕(至少我是这么认为的)~~~
    另外,如果要将进度条变为按钮,实现起来并不复杂,关键问题还是上面的,不知道是否加载完毕。
    ******************************
    C#代码中心[CCSharp.Net]内测中
    网站由站长用C#全新打造
    欢迎参观访问~~~
    ******************************
      

  2.   

    对于如何知道用户请求网页内容是否加载完毕是有办法的,http代理可以通过捕获javascript中的事件来判断是否加载完毕。
    但是又该如何告诉客户端该显示网页了呢?
      

  3.   

    现在不是有网页代理吗?http://www.cz88.net
      

  4.   

    to:mextb1860()我是因为有特定的需要,特别的需求,所做的代理程序需要进行特别的用途.不是只是实现浏览网页而已。请谅解
      

  5.   

    1.如果你想通过代理向页面强行追加代码的话,是可以的。甚至IIS本身也支持对其返回的页面都自动追加代码。2.当HTML元素加载完毕,就会触发onload事件,你可以利用这点实现加载时不显示加载完毕才显示的功能。但加载进度是无法准确确定的。3.如果你要追加代码的页面都是你自己的,那会没什么问题。但如果处理的是任何外来的页面,那就可能会破坏掉原页面,因为原页面的script可能也会对onload事件有所利用,你要做到不破坏onload事件就可能需要借助到一些javascript框架。如果有更准确的需求,可以说出来,或许有更好的办法。
      

  6.   

    感谢cat_hsfz,对于你说的3点基本上都没有问题,已经可以搞定。捕获每一个网页onload的事件,然后针对不同的事件进行处理。这也没有问题, 问题是,javascript在执行onload事件之前,客户端浏览器已经在显示页面了!!如何限制浏览器不显示页面(或者说掩盖住),等代理端收到了onload事件后,再通知客户端显示页面, 这点一直没有头绪。
      

  7.   

    to:jyk啊,大哥我那样描述是为了让大家明白我的需要实现的效果,当然程序是有其他用途的了。顺便顶
      

  8.   

    完全没得问题
    你可以先给用户发个iframe,再用个div盖住
    iframe的src放着真实的url
    onload之后把iframe上面的div拿掉即可既然是proxy,你想怎么控制数据流都是可以办到的,所以主要还是html和js的问题
      

  9.   

    终于有人响应了,非常谢谢to:Sunmast(速马|回到未来)
    我这样理解对不对, 在发送给用户请求网页的同时,是发送另外一个网页(网页中包括你说的iframe和div)? 还是修改所请求的网页(增加你说的iframe和div)。"onload之后把iframe上面的div拿掉即可" 想象一下当我的代理收到了onload这个事件,代理应当要发送什么样的数据可以“拿掉”?
      

  10.   

    对于大多数普通的页面,你放一个div在最顶上就能够覆盖住。但如果内容有<select>或者<object>,那就比较麻烦了。你最好把原本的内容套到一个大的<div>里面,然后隐藏掉。另外,这样做无论如何也会破坏掉html文档的结构。
      

  11.   

    恩,很感谢楼上几位,有似乎有点idea了。是否是这样:对户所请求的页面修改javascript和html部分,对于html增加div,iframe来实现“盖住”的效果,对于javascript,则增加onload事件的处理代码,当onload则修改div,iframe的属性为“显示”。是否这样
      

  12.   

    我前一阵子做个项目也是实现差不多这样的功能的,附上部分代码大家分享一下:                Response.Write("<div id='div_1' style='width:expression(document.body.clientWidth);height:expression(document.body.clientHeight);z-index:999;position:absolute;background-color:#ffffff;'>登录中....请不要关闭此窗口</div>");
                    Response.Write("<iframe id='aa02' frameborder='NO' border='0' framespacing='0' width='200' height='200' src='http://localhost/test/setcookies.asp'></iframe>");
                    Response.Write(sUsername + "登录成功,3秒后自动跳转回首页。如不想等待<a href='" + sUrl + "'>请点这里</a>");                Response.Write("<script language='javascript'>document.onreadystatechange = newF;");
                    Response.Write("function newF(){if(document.readyState == 'complete'){");
                    Response.Write("document.getElementById('div_1').style.display = 'none';");
                    Response.Write("window.location.href='" + sUrl + "';}}");
                    Response.Write("setTimeout(\"window.location.href='" + sUrl + "'\",10000);</script>");
      

  13.   

    to CN40618(菜鸟):谢谢你的回复,但是如果只是简单的超时跳转还是实现不了“缓存”加载网页的目的,而且象window.location.href这样的对代理来说又是另外一个请求。to uno(钢盅郭子):
    不会啊。也许象cat_hsfz说的,这种实现只能针对大多数普通的页面
      

  14.   

    to CN40618(菜鸟):
    <div id='div_1' style='width:expression(document.body.clientWidth);height:expression(document.body.clientHeight); z-index:999;position:absolute;background-color:#ffffff;'>登录中....请不要关闭此窗口</div>这样对Mozilla浏览器无效,有什么其他办法