问题描述
如何使用 dotnetbrowser 在 winform 应用程序中执行以下操作?
我可以用普通的网络浏览器做到这一点,但我希望它保持静音。这就是我尝试使用 dotnetbrowser 的原因。
dotNetbrowser 是一个不错的选择,还是有更好的选择?
这是来自我使用非静音网络浏览器的测试代码。首先,我创建了一个监听 redirectUri 的监听器:
var listener = new HttpListener();
listener.Prefixes.Add(redirectURI);
listener.Start();
然后我在网络浏览器中启动网址:
Process p = Process.Start(url);
启动的 url 将向 redirectUri 发送回调。听众会得到它。
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();
解决方法
我在 dotnetbrowser 支持站点的帮助下找到了解决方案。
这是我新测试项目中的 winform 构造函数:
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();
}