用twebbrowser做了个浏览器。在这个浏览器上是屏蔽掉地址输入栏的。当这个浏览器一启动,就有一个网页显示,在这个网页上有很多网站的链接。
现在,我想问的是,当点击这些链接看到网页后,怎么样才能实现把这些网页存入缓存中,当下次再点击这些链接看网页时,就直接从缓存中读取,这样速度就相对快些了。
各位大侠,帮帮小弟。谢谢了

解决方案 »

  1.   

    Flags is a set of values that specify whether to add the resource to the history list, whether to read from or write to the cache, and whether to display the resource in a new window. 这个是TWebbrowser的Navigate的帮助里面说的。TWebBrowser.Offline
    Indicates whether the Web browser gets its document from the local cache.
      

  2.   

    你使用TWebBrowser.Navigate(网址)时,本身就是从缓存中找,如果有,就从中取要屏蔽缓存功能需使用TWebBrowser.Navigate(网址,flags)
    当flags为navNoReadFromCache 或 4 时不从缓存中找
    当flags为navNoWriteToCache 或 8 时不将当前页放入缓存所以你根本不用操心
      

  3.   

    谢谢各位大侠的指点。你们说的我也在帮助文档里看到了。现在,老板又把这个方案否定掉了。他现在又提出新的方案了。要求我们做到,当打开浏览器点击链接时,先要做个判断,如果这个链接的网页在缓存里了,就直接读出来,没又的话,再去从网上down。down好后还是要从缓存读取,真时郁闷啊
      

  4.   

    实现这个功能需要以下步骤:
    1、判断页面是否已经在缓存内,参考这个文章:
    http://www.csdn.net/Develop/Read_Article.asp?Id=131112、如果不在,当然是直接打开了,webbrowser会自动缓存页面的
    如果在缓存中,两种办法,一种是以查看硬盘上htm文件的方式直接调用硬盘中缓存的页面,这个不好。另外就是将webbrowser设置为离线方式,让webbrowser自己从缓存中取文件,设置离线方式的代码:function SetOffline:Boolean;    //设定浏览器为离线状态
    var
      ConInfo:INTERNET_CONNECTED_INFO;
    begin
      ConInfo.dwConnectedState := INTERNET_STATE_DISCONNECTED_BY_USER;
      ConInfo.dwFlags := ISO_FORCE_DISCONNECTED;
      InternetSetOption(nil, INTERNET_OPTION_CONNECTED_STATE, @ConInfo, sizeof(ConInfo));
      result:=True;
    end;
    记得要引用wininet
      

  5.   

    一条语句 TWebBrowser.Navigate(网址) 就可以完成你下面要求的所有内容///
    当打开浏览器点击链接时,先要做个判断,如果这个链接的网页在缓存里了,就直接读出来,没又的话,再去从网上down。down好后还是要从缓存读取,真时郁闷啊
    ///当执行这条语句时,它先做判断,如果这个链接的网页在缓存里了,就直接读出来,没有的话,再去从网上down(除非你用了参数navNoReadFromCache),down好后就将内容保存在缓存中(除非你用了参数navNoWriteToCache),并显示出来,下次再访问时就直接从缓存中取。
      

  6.   

    不一定会自动从缓存里面取,因为在IE中有设置是否自动检测网页的更新,一般情况下是检测的。就是说它还是要与服务器通信的,你可以试一下访问一个打开很慢的网页。然后过一段时间再打开,可以发现还是比较慢。另外如果是动态页面的话(虽然这个“动态”页面可能里面都是静态内容,没有任何服务器端脚本),IE是不会从缓存里面读取的。
      

  7.   

    webbrower1.offline:=true;
    webbrower1.navigate('url');
    webbrower1.offline:=false;