Skip to content

VIP控制器类_IFBroSharpVIPControl

概述

FBro VIP控制器提供了高级浏览器功能控制,包括指纹管理、资源拦截替换、WebSocket监控等功能。这些功能需要VIP会员权限才能使用。

接口定义

csharp
/// <summary>
/// FBro VIP控制器接口
/// </summary>
public interface IFBroSharpVIPControl : IFBroSharpBase, IDisposable
{
    /// <summary>
    /// 是否有效
    /// </summary>
    bool IsValid { get; }
    
    // 子控制器获取
    IFBroSharpFingerPrintControl GetFingerPrintControl();
    IFBroSharpAdvancedControl GetAdvancedControl();
    IFBroSharpDevToolsDOM GetDevToolsDOM();
    
    // WebSocket功能
    void EnableWebsocketFiter();
    
    // 资源过滤器(内容修改)
    void ResponseFilterAddChangeData(FBroSharpResponseURLFindType url_type, string url, FBroSharpResponseFilterType change_type, string key, string change_data);
    void ResponseFilterDeleteChangeData(string url);
    void ResponseFilterDeleteAllData();
    
    // 资源处理器(资源替换)
    void ResourceHandlerAddChangeData(FBroSharpResponseURLFindType url_type, string url, string mini_type, FBroSharpStringMap[] header_map, byte[] data);
    void ResourceHandlerAddChangeFile(FBroSharpResponseURLFindType url_type, string url, string mini_type, FBroSharpStringMap[] header_map, string file_path);
    void ResourceHandlerDeleteChangeData(string url);
    void ResourceHandlerDeleteAllData();
}

功能模块

1. 子控制器管理

VIP控制器提供对各种专业功能控制器的访问:

1.1 获取指纹控制器

csharp
/// <summary>
/// 获取浏览器指纹控制器
/// </summary>
/// <param name="browser">浏览器实例</param>
/// <returns>指纹控制器实例</returns>
public static IFBroSharpFingerPrintControl GetFingerprintController(IFBroSharpBrowser browser)
{
    try
    {
        var vipControl = browser.GetVIPControl();
        if (vipControl?.IsValid == true)
        {
            var fingerprintControl = vipControl.GetFingerPrintControl();
            if (fingerprintControl?.IsValid == true)
            {
                Console.WriteLine("指纹控制器获取成功");
                return fingerprintControl;
            }
        }
        
        Console.WriteLine("无法获取指纹控制器,请检查VIP权限");
        return null;
    }
    catch (Exception ex)
    {
        Console.WriteLine($"获取指纹控制器失败: {ex.Message}");
        return null;
    }
}

1.2 获取高级功能控制器

csharp
/// <summary>
/// 获取高级功能控制器
/// </summary>
/// <param name="browser">浏览器实例</param>
/// <returns>高级功能控制器实例</returns>
public static IFBroSharpAdvancedControl GetAdvancedController(IFBroSharpBrowser browser)
{
    try
    {
        var vipControl = browser.GetVIPControl();
        if (vipControl?.IsValid == true)
        {
            var advancedControl = vipControl.GetAdvancedControl();
            if (advancedControl?.IsValid == true)
            {
                Console.WriteLine("高级功能控制器获取成功");
                return advancedControl;
            }
        }
        
        Console.WriteLine("无法获取高级功能控制器,请检查VIP权限");
        return null;
    }
    catch (Exception ex)
    {
        Console.WriteLine($"获取高级功能控制器失败: {ex.Message}");
        return null;
    }
}

1.3 获取开发者DOM工具

csharp
/// <summary>
/// 获取开发者DOM工具
/// </summary>
/// <param name="browser">浏览器实例</param>
/// <returns>开发者DOM工具实例</returns>
public static IFBroSharpDevToolsDOM GetDevToolsDOM(IFBroSharpBrowser browser)
{
    try
    {
        var vipControl = browser.GetVIPControl();
        if (vipControl?.IsValid == true)
        {
            var devToolsDOM = vipControl.GetDevToolsDOM();
            if (devToolsDOM?.IsValid == true)
            {
                Console.WriteLine("开发者DOM工具获取成功");
                return devToolsDOM;
            }
        }
        
        Console.WriteLine("无法获取开发者DOM工具,请检查VIP权限");
        return null;
    }
    catch (Exception ex)
    {
        Console.WriteLine($"获取开发者DOM工具失败: {ex.Message}");
        return null;
    }
}

2. WebSocket拦截功能

2.1 启用WebSocket过滤器

csharp
/// <summary>
/// 启用WebSocket拦截功能
/// </summary>
/// <param name="browser">浏览器实例</param>
/// <returns>是否启用成功</returns>
public static bool EnableWebSocketInterception(IFBroSharpBrowser browser)
{
    try
    {
        var vipControl = browser.GetVIPControl();
        if (vipControl?.IsValid == true)
        {
            vipControl.EnableWebsocketFiter();
            Console.WriteLine("WebSocket拦截功能已启用");
            return true;
        }
        
        Console.WriteLine("无法启用WebSocket拦截功能,请检查VIP权限");
        return false;
    }
    catch (Exception ex)
    {
        Console.WriteLine($"启用WebSocket拦截功能失败: {ex.Message}");
        return false;
    }
}

3. 资源过滤器(内容修改)

资源过滤器允许在不替换整个资源的情况下修改特定内容。

3.1 添加内容修改规则

csharp
/// <summary>
/// 添加资源内容修改规则
/// </summary>
/// <param name="browser">浏览器实例</param>
/// <param name="urlType">URL匹配类型</param>
/// <param name="targetUrl">目标URL</param>
/// <param name="changeType">修改类型(插入或替换)</param>
/// <param name="searchKey">要查找的文本</param>
/// <param name="replaceContent">要替换或插入的内容</param>
/// <returns>是否添加成功</returns>
public static bool AddContentModificationRule(
    IFBroSharpBrowser browser, 
    FBroSharpResponseURLFindType urlType,
    string targetUrl, 
    FBroSharpResponseFilterType changeType,
    string searchKey, 
    string replaceContent)
{
    try
    {
        var vipControl = browser.GetVIPControl();
        if (vipControl?.IsValid == true)
        {
            vipControl.ResponseFilterAddChangeData(urlType, targetUrl, changeType, searchKey, replaceContent);
            Console.WriteLine($"内容修改规则添加成功: {targetUrl}");
            return true;
        }
        
        Console.WriteLine("无法添加内容修改规则,请检查VIP权限");
        return false;
    }
    catch (Exception ex)
    {
        Console.WriteLine($"添加内容修改规则失败: {ex.Message}");
        return false;
    }
}

3.2 内容修改使用示例

csharp
/// <summary>
/// 内容修改功能示例
/// </summary>
public class ContentModificationExample
{
    /// <summary>
    /// 修改网页标题
    /// </summary>
    public static void ModifyPageTitle(IFBroSharpBrowser browser)
    {
        // 将所有页面的title标签内容替换为自定义标题
        AddContentModificationRule(
            browser,
            FBroSharpResponseURLFindType.Contains,  // URL包含匹配
            "example.com",                          // 目标域名
            FBroSharpResponseFilterType.Replace,    // 替换模式
            "<title>",                              // 查找标签
            "<title>自定义标题 - "                   // 替换内容
        );
    }
    
    /// <summary>
    /// 注入自定义JavaScript
    /// </summary>
    public static void InjectCustomScript(IFBroSharpBrowser browser)
    {
        string customScript = @"
            <script>
                console.log('自定义脚本已注入');
                // 在这里添加你的自定义JavaScript代码
            </script>
        ";
        
        // 在</head>标签前插入自定义脚本
        AddContentModificationRule(
            browser,
            FBroSharpResponseURLFindType.Contains,
            "target-website.com",
            FBroSharpResponseFilterType.Insert,    // 插入模式
            "</head>",                              // 在此标签前插入
            customScript                            // 要插入的脚本
        );
    }
    
    /// <summary>
    /// 修改API响应数据
    /// </summary>
    public static void ModifyApiResponse(IFBroSharpBrowser browser)
    {
        // 修改API返回的JSON数据
        AddContentModificationRule(
            browser,
            FBroSharpResponseURLFindType.Exact,     // 精确匹配URL
            "https://api.example.com/user/info",    // API地址
            FBroSharpResponseFilterType.Replace,    // 替换模式
            "\"role\":\"user\"",                    // 查找内容
            "\"role\":\"admin\""                    // 替换内容
        );
    }
}

3.3 删除内容修改规则

csharp
/// <summary>
/// 删除指定URL的内容修改规则
/// </summary>
/// <param name="browser">浏览器实例</param>
/// <param name="targetUrl">目标URL</param>
/// <returns>是否删除成功</returns>
public static bool RemoveContentModificationRule(IFBroSharpBrowser browser, string targetUrl)
{
    try
    {
        var vipControl = browser.GetVIPControl();
        if (vipControl?.IsValid == true)
        {
            vipControl.ResponseFilterDeleteChangeData(targetUrl);
            Console.WriteLine($"内容修改规则删除成功: {targetUrl}");
            return true;
        }
        
        return false;
    }
    catch (Exception ex)
    {
        Console.WriteLine($"删除内容修改规则失败: {ex.Message}");
        return false;
    }
}

/// <summary>
/// 删除所有内容修改规则
/// </summary>
/// <param name="browser">浏览器实例</param>
/// <returns>是否删除成功</returns>
public static bool RemoveAllContentModificationRules(IFBroSharpBrowser browser)
{
    try
    {
        var vipControl = browser.GetVIPControl();
        if (vipControl?.IsValid == true)
        {
            vipControl.ResponseFilterDeleteAllData();
            Console.WriteLine("所有内容修改规则已删除");
            return true;
        }
        
        return false;
    }
    catch (Exception ex)
    {
        Console.WriteLine($"删除所有内容修改规则失败: {ex.Message}");
        return false;
    }
}

4. 资源处理器(资源替换)

资源处理器允许完全替换网络资源,可以用本地文件或内存数据替换远程资源。

4.1 使用数据替换资源

csharp
/// <summary>
/// 使用数据替换网络资源
/// </summary>
/// <param name="browser">浏览器实例</param>
/// <param name="urlType">URL匹配类型</param>
/// <param name="targetUrl">目标URL</param>
/// <param name="mimeType">MIME类型</param>
/// <param name="headers">响应头</param>
/// <param name="data">替换数据</param>
/// <returns>是否替换成功</returns>
public static bool ReplaceResourceWithData(
    IFBroSharpBrowser browser,
    FBroSharpResponseURLFindType urlType,
    string targetUrl,
    string mimeType,
    FBroSharpStringMap[] headers,
    byte[] data)
{
    try
    {
        var vipControl = browser.GetVIPControl();
        if (vipControl?.IsValid == true)
        {
            vipControl.ResourceHandlerAddChangeData(urlType, targetUrl, mimeType, headers, data);
            Console.WriteLine($"资源替换成功: {targetUrl}");
            return true;
        }
        
        Console.WriteLine("无法替换资源,请检查VIP权限");
        return false;
    }
    catch (Exception ex)
    {
        Console.WriteLine($"资源替换失败: {ex.Message}");
        return false;
    }
}

4.2 使用文件替换资源

csharp
/// <summary>
/// 使用本地文件替换网络资源
/// </summary>
/// <param name="browser">浏览器实例</param>
/// <param name="urlType">URL匹配类型</param>
/// <param name="targetUrl">目标URL</param>
/// <param name="mimeType">MIME类型</param>
/// <param name="headers">响应头</param>
/// <param name="filePath">本地文件路径</param>
/// <returns>是否替换成功</returns>
public static bool ReplaceResourceWithFile(
    IFBroSharpBrowser browser,
    FBroSharpResponseURLFindType urlType,
    string targetUrl,
    string mimeType,
    FBroSharpStringMap[] headers,
    string filePath)
{
    try
    {
        if (!File.Exists(filePath))
        {
            Console.WriteLine($"文件不存在: {filePath}");
            return false;
        }
        
        var vipControl = browser.GetVIPControl();
        if (vipControl?.IsValid == true)
        {
            vipControl.ResourceHandlerAddChangeFile(urlType, targetUrl, mimeType, headers, filePath);
            Console.WriteLine($"资源替换成功: {targetUrl} -> {filePath}");
            return true;
        }
        
        Console.WriteLine("无法替换资源,请检查VIP权限");
        return false;
    }
    catch (Exception ex)
    {
        Console.WriteLine($"资源替换失败: {ex.Message}");
        return false;
    }
}

4.3 资源替换使用示例

csharp
/// <summary>
/// 资源替换功能示例
/// </summary>
public class ResourceReplacementExample
{
    /// <summary>
    /// 替换CSS文件
    /// </summary>
    public static void ReplaceCssFile(IFBroSharpBrowser browser)
    {
        // 创建自定义CSS内容
        string customCss = @"
            body { 
                background-color: #f0f0f0 !important; 
                font-family: 'Microsoft YaHei', sans-serif !important;
            }
            .header { 
                background-color: #007acc !important; 
            }
        ";
        
        byte[] cssData = Encoding.UTF8.GetBytes(customCss);
        
        // 设置响应头
        var headers = new FBroSharpStringMap[]
        {
            new FBroSharpStringMap { key = "Content-Type", value = "text/css; charset=utf-8" },
            new FBroSharpStringMap { key = "Cache-Control", value = "no-cache" }
        };
        
        // 替换CSS文件
        ReplaceResourceWithData(
            browser,
            FBroSharpResponseURLFindType.Contains,
            "styles.css",
            "text/css",
            headers,
            cssData
        );
    }
    
    /// <summary>
    /// 替换JavaScript文件
    /// </summary>
    public static void ReplaceJavaScriptFile(IFBroSharpBrowser browser)
    {
        string localJsFile = @"C:\CustomScripts\custom.js";
        
        // 检查文件是否存在
        if (File.Exists(localJsFile))
        {
                    var headers = new FBroSharpStringMap[]
        {
            new FBroSharpStringMap { key = "Content-Type", value = "application/javascript; charset=utf-8" }
        };
            
            // 使用本地文件替换远程JavaScript
            ReplaceResourceWithFile(
                browser,
                FBroSharpResponseURLFindType.Exact,
                "https://example.com/assets/main.js",
                "application/javascript",
                headers,
                localJsFile
            );
        }
    }
    
    /// <summary>
    /// 替换图片资源
    /// </summary>
    public static void ReplaceImageResource(IFBroSharpBrowser browser)
    {
        string localImagePath = @"C:\Images\custom-logo.png";
        
        if (File.Exists(localImagePath))
        {
            var headers = new FBroSharpStringMap[]
            {
                new FBroSharpStringMap { key = "Content-Type", value = "image/png" }
            };
            
            // 替换网站Logo
            ReplaceResourceWithFile(
                browser,
                FBroSharpResponseURLFindType.Contains,
                "logo.png",
                "image/png",
                headers,
                localImagePath
            );
        }
    }
    
    /// <summary>
    /// 模拟API响应
    /// </summary>
    public static void MockApiResponse(IFBroSharpBrowser browser)
    {
        // 创建模拟的API响应数据
        var mockResponse = new
        {
            code = 200,
            message = "success",
            data = new
            {
                user_id = 12345,
                username = "test_user",
                role = "admin",
                permissions = new[] { "read", "write", "admin" }
            }
        };
        
        string jsonResponse = Newtonsoft.Json.JsonConvert.SerializeObject(mockResponse, Newtonsoft.Json.Formatting.Indented);
        byte[] responseData = Encoding.UTF8.GetBytes(jsonResponse);
        
        var headers = new FBroSharpStringMap[]
        {
            new FBroSharpStringMap { key = "Content-Type", value = "application/json; charset=utf-8" },
            new FBroSharpStringMap { key = "Access-Control-Allow-Origin", value = "*" }
        };
        
        // 替换API响应
        ReplaceResourceWithData(
            browser,
            FBroSharpResponseURLFindType.Exact,
            "https://api.example.com/user/profile",
            "application/json",
            headers,
            responseData
        );
    }
}

4.4 删除资源替换规则

csharp
/// <summary>
/// 删除指定URL的资源替换规则
/// </summary>
/// <param name="browser">浏览器实例</param>
/// <param name="targetUrl">目标URL</param>
/// <returns>是否删除成功</returns>
public static bool RemoveResourceReplacement(IFBroSharpBrowser browser, string targetUrl)
{
    try
    {
        var vipControl = browser.GetVIPControl();
        if (vipControl?.IsValid == true)
        {
            vipControl.ResourceHandlerDeleteChangeData(targetUrl);
            Console.WriteLine($"资源替换规则删除成功: {targetUrl}");
            return true;
        }
        
        return false;
    }
    catch (Exception ex)
    {
        Console.WriteLine($"删除资源替换规则失败: {ex.Message}");
        return false;
    }
}

/// <summary>
/// 删除所有资源替换规则
/// </summary>
/// <param name="browser">浏览器实例</param>
/// <returns>是否删除成功</returns>
public static bool RemoveAllResourceReplacements(IFBroSharpBrowser browser)
{
    try
    {
        var vipControl = browser.GetVIPControl();
        if (vipControl?.IsValid == true)
        {
            vipControl.ResourceHandlerDeleteAllData();
            Console.WriteLine("所有资源替换规则已删除");
            return true;
        }
        
        return false;
    }
    catch (Exception ex)
    {
        Console.WriteLine($"删除所有资源替换规则失败: {ex.Message}");
        return false;
    }
}

方法参数说明

URL匹配类型 (FBroSharpResponseURLFindType)

说明使用场景
Exact精确匹配完整URL针对特定API或资源
ContainsURL包含指定字符串匹配多个相似资源
StartsWithURL以指定字符串开头匹配特定路径下的所有资源
EndsWithURL以指定字符串结尾匹配特定文件类型

内容修改类型 (FBroSharpResponseFilterType)

说明使用场景
Replace替换找到的文本修改现有内容
Insert在找到的文本后插入新内容添加额外内容

常用MIME类型

文件类型MIME类型说明
HTMLtext/html网页文件
CSStext/css样式表文件
JavaScriptapplication/javascript脚本文件
JSONapplication/jsonJSON数据
PNG图片image/pngPNG格式图片
JPEG图片image/jpegJPEG格式图片
PDFapplication/pdfPDF文档

完整使用示例

VIP控制器管理类

csharp
/// <summary>
/// VIP控制器管理类
/// </summary>
public class VipControllerManager
{
    private readonly IFBroSharpBrowser _browser;
    private readonly IFBroSharpVIPControl _vipControl;
    
    public VipControllerManager(IFBroSharpBrowser browser)
    {
        _browser = browser ?? throw new ArgumentNullException(nameof(browser));
        _vipControl = browser.GetVIPControl();
        
        if (_vipControl?.IsValid != true)
        {
            throw new InvalidOperationException("无法获取VIP控制器,请检查VIP权限");
        }
    }
    
    /// <summary>
    /// 初始化所有功能
    /// </summary>
    public void InitializeFeatures()
    {
        try
        {
            // 启用WebSocket拦截
            EnableWebSocketInterception(_browser);
            
            // 设置内容修改规则
            SetupContentModification();
            
            // 设置资源替换规则
            SetupResourceReplacement();
            
            Console.WriteLine("VIP功能初始化完成");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"VIP功能初始化失败: {ex.Message}");
        }
    }
    
    /// <summary>
    /// 设置内容修改规则
    /// </summary>
    private void SetupContentModification()
    {
        // 注入通用JavaScript工具
        string utilScript = @"
            <script>
                window.CustomUtils = {
                    log: function(msg) { console.log('[Custom]', msg); },
                    ready: function(fn) { 
                        if (document.readyState === 'loading') {
                            document.addEventListener('DOMContentLoaded', fn);
                        } else {
                            fn();
                        }
                    }
                };
            </script>
        ";
        
        AddContentModificationRule(
            _browser,
            FBroSharpResponseURLFindType.Contains,
            "example.com",
            FBroSharpResponseFilterType.Insert,
            "</head>",
            utilScript
        );
    }
    
    /// <summary>
    /// 设置资源替换规则
    /// </summary>
    private void SetupResourceReplacement()
    {
        // 替换jQuery为本地版本
        string localJqueryPath = @"C:\WebAssets\jquery-3.6.0.min.js";
        if (File.Exists(localJqueryPath))
        {
            var headers = new FBroSharpStringMap[]
            {
                new FBroSharpStringMap { key = "Content-Type", value = "application/javascript" }
            };
            
            ReplaceResourceWithFile(
                _browser,
                FBroSharpResponseURLFindType.Contains,
                "jquery",
                "application/javascript",
                headers,
                localJqueryPath
            );
        }
    }
    
    /// <summary>
    /// 清理所有规则
    /// </summary>
    public void CleanupRules()
    {
        try
        {
            RemoveAllContentModificationRules(_browser);
            RemoveAllResourceReplacements(_browser);
            Console.WriteLine("所有VIP规则已清理");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"清理VIP规则失败: {ex.Message}");
        }
    }
    
    /// <summary>
    /// 释放资源
    /// </summary>
    public void Dispose()
    {
        CleanupRules();
        _vipControl?.Dispose();
    }
}

使用注意事项

1. VIP权限验证

csharp
// 使用前始终检查VIP权限
var vipControl = browser.GetVIPControl();
if (vipControl?.IsValid != true)
{
    throw new UnauthorizedAccessException("需要VIP会员权限");
}

2. 资源路径处理

csharp
// 确保文件路径存在
if (!File.Exists(filePath))
{
    throw new FileNotFoundException($"文件不存在: {filePath}");
}

// 使用绝对路径
string absolutePath = Path.GetFullPath(filePath);

3. 错误处理

csharp
try
{
    // VIP功能调用
    vipControl.SomeMethod();
}
catch (UnauthorizedAccessException)
{
    // 权限不足
    Console.WriteLine("VIP权限不足");
}
catch (Exception ex)
{
    // 其他错误
    Console.WriteLine($"操作失败: {ex.Message}");
}

4. 性能考虑

  • 规则数量:避免设置过多的修改规则,影响性能
  • 文件大小:大文件替换可能影响加载速度
  • 匹配精度:优先使用精确匹配而非模糊匹配

5. 资源管理

csharp
// 及时清理不需要的规则
vipControl.ResponseFilterDeleteChangeData(unusedUrl);
vipControl.ResourceHandlerDeleteChangeData(unusedUrl);

// 程序退出前清理所有规则
vipControl.ResponseFilterDeleteAllData();
vipControl.ResourceHandlerDeleteAllData();

最佳实践

  1. 权限检查:使用VIP功能前始终验证权限
  2. 规则管理:建立规则管理机制,避免规则冲突
  3. 错误处理:完善的异常处理和日志记录
  4. 性能优化:合理使用匹配类型,避免过度拦截
  5. 资源清理:及时清理不需要的规则和资源
  6. 测试验证:充分测试修改和替换规则的效果
  7. 安全考虑:谨慎处理用户输入,防止安全漏洞

相关文档

#region 程序集 FBroSharpInterface, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
// T:\Csharp\FBro课件代码\packages\FBroSharp.Common.4.18.30\FBroSharp\x86\FBroSharpInterface.dll
// Decompiled with ICSharpCode.Decompiler 8.1.1.7464
#endregion

using System;
using FBroSharp.Const;
using FBroSharp.DataType;
using FBroSharp.Lib;

namespace FBroSharp.VIP;

public interface IFBroSharpVIPControl : IFBroSharpBase, IDisposable
{
    //
    // 摘要:
    //     是否有效
    bool IsValid { get; }

    //
    // 摘要:
    //     获取指纹控制类
    IFBroSharpFingerPrintControl GetFingerPrintControl();

    //
    // 摘要:
    //     获取高级功能控制类
    IFBroSharpAdvancedControl GetAdvancedControl();

    //
    // 摘要:
    //     启用websocke拦截功能
    void EnableWebsocketFiter();

    //
    // 摘要:
    //     获取开发者DOM
    IFBroSharpDevToolsDOM GetDevToolsDOM();

    //
    // 摘要:
    //     FBrowser_VIP过滤器_修改内容
    //
    //     VIP高级功能,需赞助后才能使用,非VIP用户可通过资源过滤器自行分包处理,此功能更方便更快; 对目标地址通过匹配目标文本修改内容,在资源加载前设置,也可在初始化后设置,如果"浏览器_获取资源过滤器GetResourceResponseFilter"事件中返回真自定义资源此设置将不会生效;
    //     如果同一个目标存在多个需要修改的数据,多次调用本方法即可,但要注意目标地址和匹配模式要保持一致,否则可能会出错
    //
    // 参数:
    //   url_type:
    //     地址匹配模式
    //
    //   url:
    //     要替换目标资源链接地址,地址要为完整地址
    //
    //   change_type:
    //     如果模式为插入,将会在查找到的目标文本后面插入替换的文本;模式为修改,将会将目标文本删除替换为新文本;
    //
    //   key:
    //     要查找的文本
    //
    //   change_data:
    //     要替换或插入的文本
    void ResponseFilterAddChangeData(FBroSharpResponseURLFindType url_type, string url, FBroSharpResponseFilterType change_type, string key, string change_data);

    //
    // 摘要:
    //     FBrowser_VIP过滤器_取消修改内容
    //
    //     在资源加载前设置,取消当前浏览器设置的对应目标地址的修改内容
    //
    // 参数:
    //   url:
    //     和之前设置的目标地址一一对应
    void ResponseFilterDeleteChangeData(string url);

    //
    // 摘要:
    //     FBrowser_VIP过滤器_取消全部修改内容
    //
    //     在资源加载前设置,取消当前浏览器设置的对应目标地址的修改内容
    void ResponseFilterDeleteAllData();

    //
    // 摘要:
    //     FBrowser_VIP过滤器_替换资源_数据
    //
    //     VIP高级功能,需赞助后才能使用,非VIP用户可通过资源处理器自行分包处理,此功能更方便更快; 用数据直接将整体链接资源替换,在资源加载前设置,也可在初始化后设置,如果"浏览器_获取资源处理器GetResourceHandler"事件中返回真自定义资源此设置将不会生效
    //
    //
    // 参数:
    //   url_type:
    //     地址匹配模式
    //
    //   url:
    //     要替换目标资源链接地址,地址要为完整地址
    //
    //   mini_type:
    //     mini_type,资源类型,和协议头的content-type对应,例如:"application/javascript"或"text/html",如果不设置默认为download
    //
    //
    //   header_map:
    //     要设置的资源响应的协议头
    //
    //   data:
    //     要替换的数据
    void ResourceHandlerAddChangeData(FBroSharpResponseURLFindType url_type, string url, string mini_type, FBroSharpStringMap[] header_map, byte[] data);

    //
    // 摘要:
    //     FBrowser_VIP过滤器_替换资源_文件
    //
    //     VIP高级功能,需赞助后才能使用,非VIP用户可通过资源处理器自行分包处理,此功能更方便更快; 用本地文件直接将整体链接资源替换,在资源加载前设置,也可在浏览器创建后设置,如果"浏览器_获取资源处理器GetResourceHandler"事件中返回真自定义资源此设置将不会生效
    //
    //
    // 参数:
    //   url_type:
    //     地址匹配模式
    //
    //   url:
    //     要替换目标资源链接地址,地址要为完整地址
    //
    //   mini_type:
    //     mini_type,资源类型,和协议头的content-type对应,例如:"application/javascript"或"text/html",如果不设置默认为download
    //
    //
    //   header_map:
    //     要设置的资源响应的协议头
    //
    //   file_path:
    //     完整的路径+文件名,例如:"F:\\xxx\\xxx\\xxx.txt"
    void ResourceHandlerAddChangeFile(FBroSharpResponseURLFindType url_type, string url, string mini_type, FBroSharpStringMap[] header_map, string file_path);

    //
    // 摘要:
    //     FBrowser_VIP过滤器_取消替换资源
    //
    //     在资源加载前设置,取消之前设置的对应目标地址的替换资源
    //
    // 参数:
    //   url:
    //     和之前设置的目标地址一一对应
    void ResourceHandlerDeleteChangeData(string url);

    //
    // 摘要:
    //     FBrowser_VIP过滤器_取消全部替换资源
    //
    //     在资源加载前设置,取消之前设置的所有替换的资源,包括通过浏览器设置的资源
    void ResourceHandlerDeleteAllData();
}
#if false // 反编译日志
缓存中的 14 项
------------------
解析: "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
找到单个程序集: "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
从以下位置加载: "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\mscorlib.dll"
------------------
解析: "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
找到单个程序集: "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
从以下位置加载: "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.dll"
#endif

如果文档对您有帮助,欢迎 请喝咖啡 ☕ | 软件发布 | 源码购买