【发布时间】:2020-07-04 07:19:33
【问题描述】:
我对 c# 和 CefSharp 有点陌生 :-) 所以对我来说很酷!
我的目标是调用一个 url,然后探索 DOM 以检索数据,然后处理这些数据以用于管理目的。 我已经实现了该检索,并且我的 js 代码使用 EvaluateScriptAsync 运行良好。
现在我想跟踪数据刷新。页面由 websocket 通信更新,然后更新 DOM 对象模型中的值。
我认为使用 RequestHandler 并调整 GetResourceResponseFilter; 但我无法做到这一点,而且我实施的方法似乎从未被调用过...... 我使用从 cefsharp 项目站点下载的最小解决方案。我只是在这个 sn-p 的末尾添加两行:
public BrowserForm()
{
InitializeComponent();
Text = "CefSharp";
WindowState = FormWindowState.Maximized;
browser = new ChromiumWebBrowser("www.google.com");
toolStripContainer.ContentPanel.Controls.Add(browser);
browser.IsBrowserInitializedChanged += OnIsBrowserInitializedChanged;
browser.LoadingStateChanged += OnLoadingStateChanged;
browser.ConsoleMessage += OnBrowserConsoleMessage;
browser.StatusMessage += OnBrowserStatusMessage;
browser.TitleChanged += OnBrowserTitleChanged;
browser.AddressChanged += OnBrowserAddressChanged;
// Add this for request handler
Handler.RequestHandler requestHandler = new MyBasicRequestHandler();
browser.RequestHandler = requestHandler;
我的测试处理程序看起来像这样!
public class MyBasicRequestHandler : CefSharp.Handler.RequestHandler
{
public bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
{
MessageBox.Show ("OnResourceResponse");
return false;
}
public bool OnProtocolExecution(IWebBrowser browserControl, IBrowser browser, string url)
{
MessageBox.Show("OnProtocolExecution : "+url);
return false;
}
public IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
{
MessageBox.Show("GetResourceResponseFilter : " + request.ReferrerUrl);
return null;
}
}
但什么都没有被解雇!
任何帮助或建议将不胜感激。
谢谢!
【问题讨论】:
-
你用的是什么版本?作为参考,您不能通过 RequestHandler 拦截 websocket 通信
-
请参阅github.com/cefsharp/CefSharp/wiki/…,了解使用响应过滤器的示例。
-
嗨,@amaitland Chromium 79.0.3945.130,CEF r79.1.36+g90301bd+chromium-79.0.3945.130,CefSharp 79.1.360.0! ;-( 对于 websocket,但我在 Chrome 中使用开发人员工具看到,在固定时间有一些 xhr 交换。如果我管理如何使 RequestHandler 工作,这将起到作用。我会在你提供的示例中找到并返回这里告诉你一些事情!最好的问候
-
您可以在 devtools 中访问 Websocket,您无法通过
RequestHandler访问它。您最初发布的代码对于版本79不正确。 -
嗨@amaitland,谢谢!根据您提供给我的示例,它正在工作,我可以在 OnResourceLoadComplete 中过滤和检测我需要的内容:-) 现在,基于此检测,我需要调用 Mainform 类中的刷新方法。你能告诉我如何以一种非常普遍和安全的方式实现这一目标吗?在 CustomRessourceRequestHandler 中声明一个静态事件,并在 Mainform 中注册一个处理程序方法可以是一个遵循的方向吗?最好的问候
标签: c# event-handling cefsharp chromium-embedded requesthandler