【C# CefSharp 过滤 RequestHandler 图片
1、方式一 ChromiumWebBrowser 实现 IRequestHandler
具体内同参照 附录;将 OnBeforeResourceLoad方法替换成2中的内容,很简单;
2、方式二 继承集成默认的抽象类 DefaultRequestHandler
internal class RequestHandler : DefaultRequestHandler
{
public override CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
{
if (request.ResourceType == ResourceType.Image)
return CefReturnValue.Cancel;
return CefReturnValue.Continue;
}
}
对比实现接口方式和继承集成默认的抽象类,发现抽象类可以只实现相关的处理方法更加灵活。而若采用IRequestHandler需要实现RequestHandler接口中的所有方法,否则抛出未实现异常;
和其他网上从Response环节过滤资源图片的方法不同,这里谈到的方法在请求图片资源之前,可以节省流量,加快页面访问速度等。
附录:
using System;
using CefSharp.Example.Filters;
using System.Security.Cryptography.X509Certificates;
using System.Collections.Generic;
using System.Text;
using CefSharp.Handler;
namespace CefSharp.Example.Handlers
{
/// <summary>
/// DefaultRequestHandler provides a base class for you to inherit from
/// you only need to implement the methods that are relevant to you.
/// If you implement the IRequestHandler interface you will need to
/// implement every method
/// </summary>
public class RequestHandler : IRequsetHandler
{
public static readonly string VersionNumberString = String.Format("Chromium: {0}, CEF: {1}, CefSharp: {2}",
Cef.ChromiumVersion, Cef.CefVersion, Cef.CefSharpVersion);
private Dictionary<UInt64, MemoryStreamResponseFilter> responseDictionary = new Dictionary<UInt64, MemoryStreamResponseFilter>();
public override bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool userGesture, bool isRedirect)
{
return false;
}
public override bool OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFram