使用 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:
*
我正在使用 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:
*