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
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

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

报告相同问题?

悬赏问题

  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题
  • ¥60 高价有偿求java辅导。工程量较大,价格你定,联系确定辅导后将采纳你的答案。希望能给出完整详细代码,并能解释回答我关于代码的疑问疑问,代码要求如下,联系我会发文档
  • ¥50 C++五子棋AI程序编写
  • ¥30 求安卓设备利用一个typeC接口,同时实现向pc一边投屏一边上传数据的解决方案。
  • ¥15 SQL Server analysis services 服务安装失败