2010-03-16 35 views
2

我正在使用DeleteUrlCacheEntry()以编程方式清除IE缓存,我想验证我是否正确执行了此操作。如何检查我是否成功清除IE的缓存?

我应该在清除缓存后期望临时Internet文件夹为空吗? (不是)

如果不是,那么确定浏览器在访问网站时是否使用缓存的最简单方法是什么?


澄清:我们的应用程序与浏览器进行交互,我写了两个功能,删除cookies和清除缓存。检查删除cookies功能,登录网站,删除cookies,刷新,您已经注销非常简单。然而,现在QA打开了一个关于清除缓存没有清空临时Internet文件目录的错误。我想指导他们如何测试功能,但想避免使用HTTP嗅探器(如Yuval建议),有没有更简单的方法?

+1

您是否需要以编程方式检查浏览器是否正在使用缓存?如果没有,只需使用HttpWatch之类的工具并查看文件来自哪里(缓存/网络)。 – 2010-03-16 13:02:42

+0

我不需要以编程方式检查。理想情况下,我想要一种不包括安装其他应用程序的方式,以便QA能够验证它是否有效。 – Motti 2010-03-16 13:09:50

+0

重新评论,当然,我想错了。对不起,删除我的答案。 – 2010-03-16 13:20:57

回答

0

显然临时Internet文件目录应该为空!

我在我的代码中的错误是由于这样的事实,FindFirstUrlCacheEntry状态,你应该通过"cookie:""visited:NULL,我认为这意味着:

Union("cookie:", "visited:") == NULL 

这是不是这样的,我有通过NULL并过滤掉cookie(取决于CacheEntryType字段)。

2

wininet的url缓存是一个奇怪和邪恶的生物。有几件事要记住。首先:如果您打开IE浏览器并执行操作,缓存中的某些条目可能会被锁定,您将无法删除它们。其次:并非URL高速缓存中的所有条目都属于IE,并且并非临时Internet文件夹中的容器中的所有条目都与浏览器URL高速缓存相关。第三:根据你的IE版本,URL缓存容器可能会损坏,导致它们相关的文件出现问题。这些错误可能会或可能不会被修复为IE8(我不确定)。

确保一切消失的最正确方法是使用FindFirst/FindNextUrlCacheGroup(),然后使用FindFirst/FindNextUrlCacheEntryEx()枚举组项。然后删除条目,然后删除组。历史记录是一个组,Cookie是另一个组,等等。您可以跳过您不感兴趣的组。

URL缓存本身只是一个荣耀的散列表(位于index.dat文件中)一些元数据的URL。元数据包含资源的本地缓存文件名。我不确定删除URL缓存项目实际上是否删除了磁盘上的资源,但您可能必须使用DeleteFile()自己执行此操作。

编辑:

如果你只是想清除一切,你可以使用inetcpl.cpl,ClearMyTracksByProcess trick。该参数是一个位掩码...我不确定哪个位代表TIF,但是它是八位数中的一个,因此应该比较容易找出它。但是,这只适用于IE7和IE8。

链接中还有其他想法。

+0

我在问题中添加了一些说明。 – Motti 2010-03-16 16:35:55

+0

他们如何检查?他们是在命令提示符下执行'dir',还是使用Windows资源管理器或其他工具? – 2010-03-16 16:52:26

+0

Windows资源管理器 – Motti 2010-03-18 10:15:23