如何防止TWebBrowser在缓存中保留页面副本?

时间:2013-09-13 17:49:09

标签: delphi browser-cache twebbrowser

我正在使用Delphi 7的TWebBrowser组件。使用TWebBrowser我正在检索放置在我的服务器上的自己的HTML文件。我不希望用户容易找到HTML文件的副本。目前,通过互联网通过TWebBrowser检索的所有文件都存储在Temporary files文件夹中,这是通过Microsoft的Internet Explorer>配置的。工具设置。我不喜欢这个,因为它不需要火箭科学家在那里寻找下载文件的副本。

我很惊讶,尽管我的HTML文件在<HEAD></HEAD>部分中包含以下行,但文件仍存储在Temporary files文件夹中:

<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="-1" />

我注意到如果HTML文件是本地的,即在临时文件文件夹之外而不是通过互联网检索,IE / TWebBrowser不会将副本藏匿在临时文件文件夹中。

我想我要问的是,我的META标签是否有问题,或者这些标签对TWebBrowser如何处理远程检索文件没有影响?

任何解决方案,除了必须使用INDY HTTP组件来获取文件,然后从用户驱动器上的隐藏文件夹加载它们?

4 个答案:

答案 0 :(得分:0)

我无法评论为什么<meta>没有生效。但我可以说TWebBrowser.Navigate()TWebBrowser.Navigate2()方法都有一个Flags参数。您可以指定navNoWriteToCache标志以防止将检索到的数据保存到缓存中。

答案 1 :(得分:0)

告诉浏览器不要缓存,例如使用Cache-Control: no-cache指令,只是告诉它不要在后续请求中重用缓存数据,而是每次都必须从服务器重新请求数据。它没有说明在本地缓存文件以进行离线浏览等等。

顺便说一句,我更喜欢使用Cache-Control: no-cache HTTP标头而不是在元标记中指定它,因为HTTP标头被服务器和浏览器之间的代理和其他缓存机制识别并通过。< / p>

相反,请查看Cache-Control: no-storeprivate指令,它们告诉Web浏览器和任何共享缓存机制(如代理)不存储数据。

但请注意,您可以帮助保护用户的数据,但无法保护他们自己。有一些注册表设置允许用户覆盖IE中的“no-store”指令。

也许内存解决方案会更好。

答案 2 :(得分:0)

NavNoReadFromCache方法作为第二个参数提供给Navigate

procedure TForm1.Button1Click(Sender: TObject);
var
  Flags: OLEVariant;

begin
  Flags:=4; //NavNoReadFromCache
  WebBrowser1.Navigate('http://www.example.com', Flags);
end;

答案 3 :(得分:-1)

Browser.EnableCaching:= False; Browser.Navigate;