使用 Windows Forms WebBrowser 控件缓存清单 (Visual Studio)

Cache Manifest with Windows Forms WebBrowser control (Visual Studio)

我正在使用 Windows Forms WebBrowser 控件来显示我也在编写的 Web 应用程序。 Web 应用程序正在使用 HTML5 缓存清单功能,当我在 Chrome 和 IE (V11) 中调用页面时,该功能运行良好。但是,当我在我的 WebBrowser 控件中测试缓存清单时,它不起作用。

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

CACHE MANIFEST
#V1.6

CACHE:
Default.aspx

NETWORK:


FALLBACK:
Error.aspx

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

我确实必须更新 IIS 的 MIME 才能识别 appcache 扩展,这已被转换为:text/cache-manifest

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

谢谢!

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

我注意到 webbrowser 控件创建了 Internet 临时文件 (C:\Users\[USER]\AppData\Local\Microsoft\Windows\Temporary Internet Files)

而本机 IE11 浏览器没有,所以看起来临时文件胜过应用缓存..如果我在 aspx 页面中设置无缓存元标记,那么应用缓存将停止工作..我'整个星期都在兜圈子!

无论如何,我会继续寻找,并确保 post 找到答案。

知道了! 对于可能需要 .net webcontrol 中的 appcache 帮助的任何其他人。

下面的代码是我用来测试的示例。 代码涵盖了 aspx 页面、javascript、webconfig 和 appcache 文件。

javascript 也有一些事件处理程序来显示其进度。

aspx 页面中的 meta 标记是一个关键因素 - 没有它,它就无法工作。

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

还有其他让我着迷的东西,避免使用 localhost 访问页面,(似乎只是 chrome 中的问题),appcache 似乎不是以同样的方式工作..你真的想要使用 IP 地址: 例如: 不要使用:http://localhost/web/index.aspx 使用:http://10.1.1.4/web/index.aspx

最后一件事 - 文件名区分大小写! 我注意到 appcache 内容依赖于确切的大小写 - 所以我只是确保我的所有文件都是小写的。 (应用缓存文件、aspx、js、图像,一切!)

希望对您有所帮助 - 祝大家好运!

#### 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:
*