【问题标题】:ChromiumFX - How to get HTML source synchonously?Chromium - 如何同步获取 HTML 源代码?
【发布时间】:2016-01-19 10:21:26
【问题描述】:

我想从非 UI 线程(屏幕外浏览器)获取 CEF3/ChromiumFX 中的网页源

我这样做

void loadHandler_OnLoadEnd(object sender, Chromium.Event.CfxOnLoadEndEventArgs e)
{
    // Get HTML code
    string htmlSource;

    CfxStringVisitor sv = new CfxStringVisitor();
    sv.Visit += ((se, ee) => { htmlSource = ee.String; });
    browser.MainFrame.GetSource(sv);
}

htmlSource 始终为 NULL。

如何同步获取 HTML 源代码?

【问题讨论】:

    标签: c# .net chromium-embedded


    【解决方案1】:

    我找到了。这是我的解决方案。

    基于 CefSharp TaskStringVisitor 实现 (https://github.com/cefsharp/CefSharp/blob/master/CefSharp/TaskStringVisitor.cs)

        public class TaskStringVisitor : CfxStringVisitor
        {
            private readonly TaskCompletionSource<string> taskCompletionSource;
    
            public TaskStringVisitor()
            {
                taskCompletionSource = new TaskCompletionSource<string>();
                this.Visit += TaskStringVisitor_Visit;
            }
    
            void TaskStringVisitor_Visit(object sender, Chromium.Event.CfxStringVisitorVisitEventArgs e)
            {
                try
                {
                    taskCompletionSource.SetResult(e.String);
                }
                catch (Exception ex)
                {
                    taskCompletionSource.SetException(ex);
                }
            }
    
            public Task<string> Task
            {
                get { return taskCompletionSource.Task; }
            }
        }
        public Task<string> GetSourceAsync()
        {
            TaskStringVisitor taskStringVisitor = new TaskStringVisitor();
            browser.MainFrame.GetSource(taskStringVisitor);
    
            return taskStringVisitor.Task;
        }
    
        async void loadHandler_OnLoadEnd(object sender, Chromium.Event.CfxOnLoadEndEventArgs e)
        {
            // Get HTML code
            string HTMLsource = await GetSourceAsync();
        }
    

    【讨论】:

      猜你喜欢
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 2012-04-22
      • 1970-01-01
      • 2020-12-05
      相关资源
      最近更新 更多