weixin_33713350 2016-07-18 11:38 采纳率: 0%
浏览 181

启动应用程序时,有没有办法以编程方式清除浏览器缓存?

由于我对用C#编程(并在WPF中创建应用程序)相当陌生,所以我想寻求您的帮助。

我们已经实现了我们称为“JobCacheUpdater”的东西。在不钻研太多细节的情况下,我们的基本想法如下:

  • 1、我们的数据库包含数千个具有不同信息位的项目。
  • 2、然后,我们希望异步地在我们的网站上加载这些信息(Ajax)。
  • 3、但是,我们不需要将这些信息单独地拼凑在一起,而是要将HTML-字符串呈现到数据库中的一个单独的表中。
  • 4、然后,我们根据一个ProjectID从该表中选择一行,该HTML-String基本上显示了包含项目所需信息的表。

这个“JobCacheUpdater”定期运行,这样我们就可以将带有HTML字符串的表与所有项目的主表同步起来。

到目前为止,我们已经使用Watin在后台运行浏览器、读取和呈现HTML-字符串,但我目前的任务是实现ChromiumEmbeddedFramework(CEF),而不是实现已有的功能。

在示例WPF项目中编写基本代码非常容易,但是当我使用项目的一些随机URL读取该页面的源代码并将其写入.txt文件时,我注意到它只加载了网站的“骨架”(如果我可以这样称呼它),但没有加载包含必要信息的表。

我编写了一个ChromeWrapper类,如下所示:

public class ChromeWrapper : IDisposable
{
    private readonly ChromiumWebBrowser _browser;
    private string _html = "";
    private bool _pageIsLoaded = false;

    public ChromeWrapper()
    {
        var settings = new CefSettings();
        settings.CefCommandLineArgs.Add("disable-gpu", "1");

        Cef.Initialize(settings, shutdownOnProcessExit: true, performDependencyCheck: true);

        _browser = new ChromiumWebBrowser(string.Empty);
        _browser.BrowserSettings.ApplicationCache = CefState.Disabled;
    }

    public string GetHtml(string url)
    {
        _pageIsLoaded = false;

        while (!_browser.IsBrowserInitialized)
            Thread.Sleep(100);

        _browser.Load(url);
        _browser.LoadingStateChanged += BrowserLoadingStateChanged;

        while (!_pageIsLoaded)
            Thread.Sleep(100);

        return _html;
    }

    private void BrowserLoadingStateChanged(object sender, LoadingStateChangedEventArgs e)
    {
        // Check to see if loading is complete - this event is called twice, one when loading starts
        // second time when it's finished
        // (rather than an iframe within the main frame).
        if (e.IsLoading) 
            return;

        _browser.LoadingStateChanged -= BrowserLoadingStateChanged;
        var htmlTask = e.Browser.MainFrame.GetSourceAsync();
        htmlTask.ContinueWith(obj =>
                                  {
                                      _html = htmlTask.Result;
                                      _pageIsLoaded = true;
                                  });
    }

    public void Dispose()
    {
        if (_browser != null)
            _browser.Dispose();

        Cef.Shutdown();
    }
}

单击Button1后,我的MainWindows类实例化ChromeWrapper,然后将源保存到我的桌面上的.txt文件中:

    private void Button1Click(object sender, RoutedEventArgs e)
    {
        using (var chrome = new ChromeWrapper())
        {
            var html = chrome.GetHtml(@"URL Test");
            var htmltPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "CefSharpTest2.html");

            File.WriteAllText(htmltPath, html);

            Process.Start(htmltPath);

            chrome.Dispose();
        }
    }

有趣的是,如果我在Button1Click中两次启动chrome.GetHtml,就会得到想要的结果,这使我得出结论,浏览器缓存可能有问题,但是我不是很确定。

另一个问题:启动应用程序时,有没有办法以编程方式清除浏览器缓存?

任何帮助都将不胜感激,谢谢!

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-10-25 19:34
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝