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或资源 |
Contains | URL包含指定字符串 | 匹配多个相似资源 |
StartsWith | URL以指定字符串开头 | 匹配特定路径下的所有资源 |
EndsWith | URL以指定字符串结尾 | 匹配特定文件类型 |
内容修改类型 (FBroSharpResponseFilterType)
| 值 | 说明 | 使用场景 |
|---|---|---|
Replace | 替换找到的文本 | 修改现有内容 |
Insert | 在找到的文本后插入新内容 | 添加额外内容 |
常用MIME类型
| 文件类型 | MIME类型 | 说明 |
|---|---|---|
| HTML | text/html | 网页文件 |
| CSS | text/css | 样式表文件 |
| JavaScript | application/javascript | 脚本文件 |
| JSON | application/json | JSON数据 |
| PNG图片 | image/png | PNG格式图片 |
| JPEG图片 | image/jpeg | JPEG格式图片 |
application/pdf | PDF文档 |
完整使用示例
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();最佳实践
- 权限检查:使用VIP功能前始终验证权限
- 规则管理:建立规则管理机制,避免规则冲突
- 错误处理:完善的异常处理和日志记录
- 性能优化:合理使用匹配类型,避免过度拦截
- 资源清理:及时清理不需要的规则和资源
- 测试验证:充分测试修改和替换规则的效果
- 安全考虑:谨慎处理用户输入,防止安全漏洞
相关文档
#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