首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >侦听dotNetBrowser中的回调

侦听dotNetBrowser中的回调
EN

Stack Overflow用户
提问于 2021-01-20 17:23:18
回答 1查看 166关注 0票数 1

如何在winform应用程序中使用dotnetbrowser执行以下操作?

  • 在dotnetbrowser中创建侦听器,用于侦听特定重定向url.
  • Open url的回调。url在另一个线程
  • 中对重定向url进行回调,侦听器从回调中捕获响应。

我可以用普通的网页浏览器来做这件事,但我希望它能保持沉默。这就是我尝试使用dotnetbrowser的原因。

dotNetBrowser是一个很好的选择,还是有更好的选择?

这是来自我的测试代码与一个非沉默的网页浏览器。首先,我创建了一个侦听器,用于侦听redirectUri:

代码语言:javascript
复制
        var listener = new HttpListener();
        listener.Prefixes.Add(redirectURI);
        listener.Start();

然后在url浏览器中启动url:

代码语言:javascript
复制
        Process p = Process.Start(url);

已启动的url将向redirectUri发送一个回调。听者会明白的。

代码语言:javascript
复制
        var context = await listener.GetContextAsync(); ;
        string formData = string.Empty;
        using (var body = context.Request.InputStream)
        {
            using (var reader = new System.IO.StreamReader(body, context.Request.ContentEncoding))
            {
                formData = reader.ReadToEnd();
            }
        }
        listener.Close();
EN

回答 1

Stack Overflow用户

发布于 2021-01-21 10:27:16

我在dotnetbrowser支持站点的帮助下找到了一个解决方案。

这是我的新测试项目中的winform构造函数:

代码语言:javascript
复制
    public Form1()
    {
        webView = new BrowserView() { Dock = DockStyle.Fill };
        Task.Run(() =>
        {
            engine = EngineFactory.Create(new EngineOptions.Builder
            {
                RenderingMode = RenderingMode.HardwareAccelerated,
                LicenseKey = "your license key here"
            }
            .Build());
            browser = engine.CreateBrowser();
        })
        .ContinueWith(t =>
        {
            webView.InitializeFrom(browser);

            var listener = new HttpListener();
            listener.Prefixes.Add(redirectURI);
            listener.Start();

            browser.Navigation.LoadUrl(url);

            var context = listener.GetContextAsync().GetAwaiter().GetResult();
            //Get data from redirectUri. You find this code from test example above, but not really relevant for the problem.
            var formData = GetRequestPostData(context.Request);
            listener.Close();

        }, TaskScheduler.FromCurrentSynchronizationContext());

        InitializeComponent();
        FormClosing += Form1_FormClosing;
        Controls.Add(webView);

        this.Visible = false;
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        browser?.Dispose();
        engine?.Dispose();
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65814484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档