如何强制WebBrowser控件使用新会话或清除会话

时间:2015-06-25 12:12:16

标签: c# vb.net internet-explorer webbrowser-control browser-cache

在我的应用程序中,用户将通过单击菜单打开多个选项卡。 每个标签都是动态创建的,包含 webbrowser control 以加载网址。

每个网址指向同一台服务器,部分网址没有访问权限,因此收到Resource not have access错误。

现在,问题是,示例 - 如果用户直接点击加载了webbrowser URL的Menu3和相关标签,然后按照下一步,URL包含其他弹出链接,那么它可以工作并能够弹出URL。

现在,用户点击Menu5没有权限的Resource not have access,收到此错误). Its fine. NOw, again URL reach to(拒绝来自服务器and try to open sub link to popup dialog then it gives菜单3 WebBrowser Control 403禁止错误拒绝访问“。它最初工作,但后来它只是给出了这个错误。

看起来,我需要清除dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.2.0' compile 'com.google.android.gms:play-services:7.3.0' compile 'com.google.api-client:google-api-client:1.20.0' compile 'com.google.api-client:google-api-client-android:1.20.0' compile 'com.google.api-client:google-api-client-gson:1.20.0' compile 'com.google.apis:google-api-services-calendar:v3-rev125-1.20.0' compile 'com.evernote:android-sdk:2.0.0-RC2' } 缓存或强制启动新会话。

任何人都可以指导我如何强制 WebBrowser 启动新会话或删除早期缓存吗?

2 个答案:

答案 0 :(得分:4)

WebBrowser控件的缓存与Internet Explorer相同。您有多种选择:

1)完全清除缓存(也将清除Internet Explorer!):

pushed by SonarSource

2)在服务器响应中使用一些标签:

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">

3)使用随机查询字符串强制刷新:

WebBrowser1.Navigate('http://www.example.com/?refresh=' & Guid.NewGuid().ToString())

4)强制刷新页面(这将加载页面2次!):

WebBrowser1.Navigate('http://www.example.com/')
WebBrowser1.Refresh(WebBrowserRefreshOption.Completely)

答案 1 :(得分:4)

有一个更好的选择。它使用WinINet.DLL并调用SetInternetOptions

[DllImport("wininet.dll", SetLastError = true)]
    private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);

    private const int INTERNET_OPTION_END_BROWSER_SESSION = 42;

InternetSetOption(IntPtr.Zero, INTERNET_OPTION_END_BROWSER_SESSION, IntPtr.Zero, 0);

这将结束浏览器的会话缓存。调用此方法后,webbrowser控件将忘记内存中的任何会话