财神浏览器插件开发功能简介:
财神浏览器采用C#语言开发,接口目前只支持C#语言,插件开放平台提供了简单易用的各种网页接口,通过这些接口,第三方开发者可以根据自己的创意开发出各种针对WEB网页程序的插件功能,以达到更加便捷的完成自己工作的需要,大大提高工作效率,比如自动填表,评论辅助回复,淘宝辅助发单,抖音辅助浏览等待你能想到的功能,浏览的宗旨是让大家能够在各行各业使用本浏览器提升繁杂的重复工作量,极大提高工作效率。
免责声明:
本浏览器提供免费开放接口,供第三方开发者创建插件。插件仅用于学习和研究目的,由开发者独立负责创建和维护。
在使用接口之前,您必须仔细阅读并同意《免责声明》
快速导航:
- 1、插件如何连接浏览器?
- 2、插件如何发送请求到浏览器?
- 3、浏览器与插件通信是否安全?
- 4、如何打包浏览器插件?
- 5、相关第三方资源推荐?
插件如何连接浏览器?
财神浏览器采用socket作为通信通道,我们提供专用的DLL文件用于配合接口使用,浏览及DLL均使用了net4.72框架作为开发基础,连接浏览器接口流说明如下:
1.为了确保插件启动被安全性,插件程序入口Main函数必须进行验证回调(发布时一定要加上,调试可以不加)。
验证回调示例代码如下:
static void Main(string[] args) { #region [限制插件只能启动一个进程] bool ret; using (Mutex mutex = new Mutex(true, Application.ProductName, out ret)) //防止多次打开窗口 { if (ret == false) Application.Exit();//退出程序 } #endregion #region [接收启动回传验证启动方式,防止外部直接伪装启动] if (args.Length == 1 && args[0].StartsWith("run_pipe:")) { string pipeName = args[0]; using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", pipeName, PipeDirection.Out)) { pipeClient.Connect(); using (StreamWriter writer = new StreamWriter(pipeClient)) { writer.Write(args[0]); } } } else if (PP.IsIDE == false) Application.Exit(); #endregion Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); }
2.浏览器通信端口32961,请确保此端口不被占用,如果此端口被占用,将无法使用浏览器的插件功能。
连接示例代码如下:
ChannelClient client = ChannelClient.Conn(32961, async (pack) => { if (pack.Cmd == ChannelType.ConnSuccess) // 连接成功的回调消息,其他的回传消息在下一章节 { // 处理业务逻辑 return; } // WEB页JS通过window.chrome.webview.postMessage给浏览器控件交互通信时传回的数据 if (pack.Cmd == ChannelType.标签WEB脚本接收) // 举例 { // 处理业务逻辑 Dictionarydata = (Dictionary )pack.Value; string tabName = data["tabName"].ToString(); string message = data["tabWebMessage"].ToString(); return; } });
3.接收回调详细条目:
浏览器回传类型 | 说明 | 回传参数详情 |
ChannelType.ConnSuccess | 插件连接浏览成功消息 | 无 |
ChannelType.ConnDisconnect | 浏览器插件接口断连消息 | 无 |
ChannelType.Init | 连接成功后回传初始浏览器信息 | browserHandle(浏览器主窗体窗口句柄) usertoken(浏览器账号令牌,需要用公钥解密,包含账号信息:userid用户ID、ip、expiry过期时间,详情在“通信安全”章节) tablist(当前已打开所有网页标签信息Json) |
ChannelType.标签WEB脚本接收 | 返回指定标签WEB页JS通过window.chrome.webview.postMessage给浏览器控件通信时传回的数据 | tabName(对应标签名) tabWebMessage(JS交互回传的数据) |
ChannelType.标签WEB资源请求 | 返回对应标签web网页请求资源URL | tabName(对应标签名) tabRequestUrl(拦截到的请求URL) |
ChannelType.标签WEB加载完成 | 标签网页加载完成消息 | tabName(对应标签名) tabUrl (标签网页打开URl) tabCookies(标签网页的Cookies) |
ChannelType.移除标签 | 浏览标签移除消息 | tabName(被移除的标签名) |
ChannelType.标签信息 | 返回更新的指定标签信息 例如浏览器移动窗口,改变大小、移动标签、切换标签、改变表情模式等属性发生变化时触发,此消息只在插件创建的标签才会触发 |
tabName(对应标签名)、tabUrl(标签打开URL)、tabLocked(是否锁定地址栏) tabAudio(是否播放媒体声音)、tabWidth(宽度)、tabHeight(高度) tabLeft(屏幕所处Left)、tabTop(屏幕所处Top)、tabVisable(是否显示状态) tabHandle(标签容器控件句柄) |
ChannelType.标签音频 | 返回标签页媒体播放状态 | tabName(对应标签名) tabAudio(媒体播放状态: 播放、静音、无) |
ChannelType.标签显示隐藏 | 返回标签页显示隐藏状态 | tabName(对应标签名) tabShow(显示隐藏状态: true false) |
插件如何发送请求到浏览器?
1.发送浏览器标签请求示例如下:
// 获取指定标签网页的cookies----------------------------------------------------------- Dictionarydata = new Dictionary (); data["tabName"] = "标签1"; // 浏览器返回的标签名 TPack tdata = new TPack(ChannelType.获取标签Cookies, data); // 创建请求对象 string cookies = await Channel.Send(tdata, true); // 提交请求,第二个参数表示是否需要返回 // 请求浏览器创建标签页并打开网址,返回创建的标签名-------------------------------------- byte[] bytes = Encoding.UTF8.GetBytes("你好"); Dictionary data = new Dictionary (); data["url"] = accInfo["url"].ToString(); data["title"] = Const.LoginAccName; // 固定标签名称 data["locked"] = true; //锁定标签地址栏 data["replaceResList"] = new Dictionary () // 替换资源列表 { //将指定标签网页请求地址中包含“main.js”的请求响应替换成bytes字节的内容 {"main.js", bytes} }; string tabName = await Channel.Send(new TPack(ChannelType.打开网址, data)); // 提交请求
2.发送浏览器标签请求详细条目:
浏览器请求类型 | 说明 | 需要返回 | 参数详情 |
ChannelType.获取标签Cookies | 获取指定标签网页的cookies | 是 | tabName(string 对应标签名 必填) |
ChannelType.打开网址 | 请求浏览器打开指定网址,并返回打开的标签名,此方法创建的标签页会跟随插件关闭而自动关闭,连续调用间隔不能少于100毫秒 | 是 |
url(string 指定打开的网址 必填) tabName(string在现有的标签页打开网址 可留空) tabOnlyWindow(bool 标签连接新窗口打开 可留空) title(string 指定标签标题 可留空) locked(bool锁定标签地址栏 可留空,默认不锁定) rightMenu(bool启用鼠标右键菜单 可留空,默认启用) mouseAction(bool启用鼠标右键动作 可留空,默认启用) navigation(bool启用前进后退等导航功能 可留空,默认启用) flashmode(bool启用Flash模式 可留空,默认禁用) developerTools(bool启用开发者工具 可留空,默认启用) replaceResList(Dictionary , 可留空,根据web请求url查找并替换响应内容,关键词前面“==|”表示绝对相等,“**|”表示包含,不填、默认是包含) |
ChannelType.执行JS脚本 | 在指定的标签页执行JS代码,并返回结果 | 是 | tabName(string 对应标签名,无则表示在当前标签上执行) tabJsCode(string 要执行的JS代码 必填) |
ChannelType.标签信息 | 获取指定标签页信息,返回尺寸位置等JSON字符串信息 | 否 | tabName(string 对应标签名 必填) |
ChannelType.移除标签 | 移除指定标签页 | 否 | tabName(string 对应标签名 必填) |
ChannelType.刷新标签 | 刷新指定标签页 | 否 | tabName(string 对应标签名 必填) |
ChannelType.切换标签 | 切换到指定标签页 | 否 | tabName(string 对应标签名 必填) |
ChannelType.标签音频 | 设置指定标签页静音状态 | 否 | tabName(string 对应标签名 必填) tabAudio(string 设置媒体静音状态: 播放、静音 必填) |
ChannelType.标签显示隐藏 | 设置指定标签页显示隐藏状态 | 否 | tabName(string 对应标签名 必填) tabShow(bool 设置标签显示隐藏状态: true false 必填) |
浏览器与插件通信是否安全?
为了考虑安全性的问题,插件与浏览器的连接成功后,浏览器在登录了账号的情况下,会在ChannelType.Init消息中返回浏览器的账号信息,此消息采用了非对称加密算法是RSA算法,避免伪造返回数据的风险,需要注意的是,仅仅只是ChannelType.Init消息采用了加密,其他消息是不加密的,用于解密验证数据合法性,以下是RSA解密的公钥(DER格式):
是否提供有开源Demo源代码?
是的,我们提供有完整的开源Dome代码示例展示插件接口的详细使用方法,有需要的开发者可以下载研究,切记源码均采用net4.72作为开发基础框架,请自行安装调试
源码下载地址:CS接口Demo+WinForm项目.rar
提醒:如果是vs2019,需要安装NET SDK。
安装方法:运行 Visual Studio Installer,选择 Visual Studio 2019 进行修改,切换到“单个组件”,勾选“.NET SDK (out of support)”,会联动勾选“.NET 5.0 Runtime (Out of support)”与“.NET Core 3.1 Runtime (Out of support)”。
如何打包浏览器插件?
财神浏览器插件扩展名为.cspk,我们提供了专用的插件打包工具,使用它就能打开完整的CSPK插件,下载地址:财神浏览器CSPK扩展打包器.rar
重要提醒:插件程序入口Main函数必须加上安全调用检测代码,具体查看详情
相关第三方资源推荐:
1、AntdUI, 作者Tom基于Ant Design设计语言来发的Winform界面库,完全遵守Apache-2.0开源协议即可,可商用
感觉Tom大力支持,GitHub项目地址:https://github.com/AntdUI/AntdUI