使用 Windows 窗体 Web 浏览器控件 (Visual Studio) 缓存清单



我正在使用 Windows 窗体 Web 浏览器控件来显示我也在编写的 Web 应用程序。Web应用程序正在使用HTML5缓存清单功能,当我在Chrome和IE(V11)中调用页面时,该功能工作正常。但是,当我在 Web 浏览器控件中测试缓存清单时,它不起作用。

我的理解是 WebBrowser 控件使用 IE 的最新本地实例进行呈现/处理 - 但它不喜欢缓存清单功能。我的缓存清单 (cache.appcache) 文件包含以下内容:

CACHE MANIFEST
#V1.6
CACHE:
Default.aspx
NETWORK:

FALLBACK:
Error.aspx

项目的其余部分非常标准。

我确实必须更新 IIS 的 MIME 以识别应用程序缓存扩展,这已被转换为:文本/缓存清单

任何人可以在这方面提供的任何帮助将不胜感激!我已经研究了在项目中使用其他 Web Broswer 控件的可能性,但真的想让事情尽可能简单......如果可能的话!

谢谢!

知道了!对于可能需要有关 .NET WebControl 中的 AppCache 帮助的其他任何人。

下面的代码是我正在测试的示例。该代码涵盖了ASPX页面,JavaScript,WebConfig和AppCache文件。

JavaScript 还具有一些事件处理程序来显示其进度。

ASPX 页面中的元标记是一个关键角色 - 没有它,它就不起作用。

不要忘记,AppCache 的本质是在您第一次访问网站时下载更改,然后在下次访问时显示更改..如果您愿意,您可以拦截任何更改并通过事件处理程序自动显示。

还有一件事让我着迷,避免使用localhost访问页面,(似乎只是在Chrome中是一个问题),appCache似乎的工作方式不同。 你真的想使用IP地址:例如:不要使用:http://localhost/web/index.aspx用途:http://10.1.1.4/web/index.aspx

最后一件事 - 文件名区分大小写!我注意到appcache内容依赖于确切的大小写 - 所以我只是确保我的所有文件都是小写的。(appcache file,aspx,js,images,一切!

希望它有帮助 - 祝大家好运!

#### ASPX Page (file: index.aspx) ##### 

<html manifest="index.appcache">
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <title></title>
</head>
<body>
    <div>index.aspx--v1</div>
    <img src="./images/data_replace.png" />
               <textarea id="Textarea1" 
        style="position: absolute; font-family: Arial; font-size: 10pt;
                    width: 277px; height: 360px; margin-top: 2px; text-align: left; top: 103px; left: 18px; z-index:1000;"></textarea>
</body>
<script type="text/javascript" src="index.js"></script>
</html>

###### JavaScript (file: index.js)  ######

function $get(id) {
    return document.getElementById(id);
}

function fnLoad() {
setTimeout(function () { alert("hello"); }, 1000);
if (window.applicationCache) {
    var appCache = window.applicationCache;
    appCache.addEventListener('error', appCacheError, false);
    appCache.addEventListener('checking', checkingEvent, false);
    appCache.addEventListener('noupdate', noUpdateEvent, false);
    appCache.addEventListener('downloading', downloadingEvent, false);
    appCache.addEventListener('progress', progressEvent, false);
    appCache.addEventListener('updateready', updateReadyEvent, false);
    appCache.addEventListener('cached', cachedEvent, false);
}
function appCacheError() { $get('Textarea1').value = $get('Textarea1').value + "nerror" }
function checkingEvent() { $get('Textarea1').value = $get('Textarea1').value + "nchecking" }
function noUpdateEvent() { $get('Textarea1').value = $get('Textarea1').value + "nnoupdate" }
function downloadingEvent() { $get('Textarea1').value = $get('Textarea1').value + "ndownloading" }
function progressEvent() { $get('Textarea1').value = $get('Textarea1').value + "nprogress" }
function updateReadyEvent() { $get('Textarea1').value = $get('Textarea1').value + "nupdateready" }
function cachedEvent() { $get('Textarea1').value = $get('Textarea1').value + "ncached" }

}
fnLoad();

#### Web.Config #####
<system.webServer>
    <staticContent>
       <mimeMap fileExtension=".appcache" mimeType="text/cache-manifest"/>
    </staticContent>
  </system.webServer>
#### Appcache File (file: index.appcache) ####
CACHE MANIFEST
# v1.1
CACHE:
index.js
images/data_replace.png
NETWORK:
*

我遇到了同样的问题,不确定您是否找到了解决此问题的方法?

我注意到 Web 浏览器控件创建临时互联网文件( C:Users[USER]AppDataLocalMicrosoftWindowsTemporary Internet Files

而本机IE11浏览器没有,所以似乎临时文件胜过appcache..如果我在aspx页面中设置了一个无缓存元标记,那么appcache就会停止工作。我整个星期都在兜圈子!

无论如何,我会继续寻找,如果我找到答案,一定要发布答案。

最新更新