Skip to content

07 WebView JS Bridge 协议

通信机制

WebView 使用 JCEF (Java Chromium Embedded Framework) 内嵌浏览器,通过 JBCefJSQuery 实现双向通信。

Java → WebView

通过执行 JavaScript 调用:

java
browser.getCefBrowser().executeJavaScript(
    "receiveData(" + gson.toJson(data) + ");",
    browser.getCefBrowser().getURL(), 0
);

消息格式

json
{
  "type": "<WebViewDataTypeEnum 值>",
  "value": &#123; ... &#125;,
  "data": &#123; ... &#125;
&#125;

WebView → Java

通过注入的 JavaScript 桥接对象:

javascript
// 在 WebView 页面加载完成后注入
window.myObject = &#123;
    sendMessage: function(data) &#123;
        // JBCefJSQuery 回调
    &#125;
&#125;;

消息格式

json
&#123;
  "type": "<WebViewDataTypeEnum 值>",
  "data": &#123; ... &#125;,
  "value": &#123; ... &#125;
&#125;

页面加载

  • 使用自定义 Scheme 加载本地资源(从 JAR classpath)
  • 加载成功 (HTTP 200) 时注入 JS Bridge 并触发 USER_LOGIN
  • URL 格式: &#123;custom_scheme&#125;://&#123;custom_host&#125;/index.html

消息类型完整列表 (WebViewDataTypeEnum)

124 种消息类型,按 12 个 UI 模块 (ModuleEnum) 路由。

LOGIN 模块 (8 种)

类型方向说明
login_initW→J初始化登录
login_logoutW→J登出
login_receiver_login_iframe_srcJ→W推送登录 iframe URL
login_succeedJ→W登录成功
login_go_loginW→J跳转登录
login_close_qr_codeW→J关闭二维码
login_abortW→J中止登录
login_checkW→J检查登录状态

CHAT 模块 (40+ 种)

对话管理

类型方向说明
chat_choose_history_itemW→J选择历史对话
chat_get_history_listW→J获取历史列表
chat_delete_history_itemW→J删除对话
chat_delete_history_allW→J删除所有对话
chat_refresh_modelW→J刷新模型
chat_get_model_listW→J获取模型列表
chat_set_modelW→J设置当前模型
chat_get_conversationW→J获取对话详情
chat_send_msgW→J发送消息
chat_resendW→J重发消息
chat_choose_fileW→J选择文件引用
chat_send_open_dir_listW→J打开目录列表
chat_update_conversation_listJ→W更新对话列表 (流式)
chat_receiver_history_listJ→W历史列表响应
chat_get_conversation_listJ→W对话列表响应
chat_delete_msgW→J删除消息
chat_predictJ→W预测响应
chat_stop_responseW→J停止响应
chat_new_chatW→J新建对话
chat_get_user_infoW→J获取用户信息

高级功能

类型方向说明
chat_get_ide_file_stateW→J获取 IDE 文件状态
chat_recommend_gameplayJ→W推荐玩法
chat_get_doc_knowledge_listW→J获取知识库列表
chat_feedback_categoryW→J反馈分类
chat_get_feedback_listW→J反馈列表
chat_receiver_*J→W各种推送通知
chat_valid_websiteW→J验证网站 URL
chat_agent_refreshJ→WAgent 刷新状态
chat_get_open_dir_listW→J获取目录列表
chat_show_freshJ→W显示刷新
chat_get_doc_knowledge_listW→J获取知识库文档列表
chat_get_open_dir_listW→J获取打开目录列表

SQL_CHAT 模块 (10 种)

类型方向说明
sql_chat_source_listW→J获取数据源列表
sql_chat_request_source_typesW→J获取数据库类型
sql_chat_sql_link_testW→J测试数据库连接
sql_chat_sql_saveW→J保存数据源
sql_chat_source_deleteW→J删除数据源
sql_chat_table_listW→J获取表列表
sql_chat_send_msgW→J发送 SQL 对话
sql_chat_get_model_listW→J获取模型列表
sql_chat_new_chatW→J新建 SQL 对话
sql_chat_stop_responseW→J停止响应

UNIT_TEST 模块 (18 种)

类型方向说明
ut_get_ut_infoW→J获取单测信息
ut_get_method_caseW→J获取方法用例
ut_get_case_codeW→J获取用例代码
ut_get_all_code_fileW→J获取所有代码文件
ut_request_*W→J各种请求
ut_copy_case_codeW→J复制用例代码
ut_page_readyW→J页面就绪
ut_function_listJ→W函数列表
ut_function_caseJ→W函数用例
ut_receive_*J→W各种接收
ut_save_codeW→J保存代码
ut_regenerateW→J重新生成

UNIT_TESTING 模块 (8 种)

类型方向说明
unitesting_receive_functionJ→W接收函数
unitesting_receive_dataJ→W接收数据
unitesting_page_readyW→J页面就绪
unitesting_saveW→J保存
unitesting_response_saveJ→W保存响应
unitesting_mapping_fileW→J映射文件
unitesting_idea_stopW→JIDE 停止
unitesting_web_stopW→JWebView 停止

BATCH_UNIT_TEST 模块 (7 种)

类型方向说明
batch_ut_createW→J创建批量单测
batch_ut_get_listW→J获取列表
batch_ut_downloadW→J下载
batch_ut_deleteW→J删除
batch_ut_messageJ→W消息推送
batch_ut_refresh_task_download_statusW→J刷新下载状态
batch_ut_get_task_listW→J获取任务列表

CODE_SEARCH 模块 (7 种)

类型方向说明
request_codesearch_code_listW→J搜索代码
request_codesearch_repository_listW→J仓库列表
request_codesearch_language_listW→J语言列表
request_copy_codeW→J复制代码
request_insert_codeW→J插入代码
request_code_fileW→J代码文件
request_open_urlW→J打开 URL

GIT_VIEW 模块 (4 种)

类型方向说明
code_review_page_readyW→J评审页就绪
code_review_get_change_resultW→J获取变更结果
code_review_get_codereview_listW→J获取评审列表
code_review_get_change_result_endJ→W变更结果结束

CODE_CHECK 模块 (4 种)

类型方向说明
request_code_check_listW→J请求检查列表
get_code_check_listJ→W获取检查列表
code_check_fixW→J修复代码
update_code_checkW→J更新检查

COMMON 模块 (11 种)

类型方向说明
common_page_readyW→J页面就绪
common_open_urlW→J打开 URL
common_open_pageJ→W打开页面
common_open_file_dialogW→J打开文件对话框
common_code_click_actionW→J代码点击操作 (copy/insert/new/diff)
common_focus_fileW→J聚焦文件
common_focus_file_lineW→J聚焦文件行
common_evaluationW→J评价
common_feedbackW→J反馈
common_download_tableW→J下载表格
common_show_message_in_webJ→W显示消息
common_plugin_base_infoJ→W插件基础信息

SETTING 模块 (6 种)

类型方向说明
setting_get_configW→J获取配置
setting_update_configW→J更新配置
setting_get_can_open_code_enhanceW→J代码增强可用性
setting_popup_keymap_settingsW→J弹出快捷键设置
setting_save_show_operate_guidanceW→J保存操作指南显示
setting_receive_repo_statusJ→W接收仓库状态

LOGIN 模块特殊消息

类型方向说明
login_show_freshJ→W显示刷新按钮 (Agent 重启时)

响应类型 (WebViewResponseTypeEnum)

Plugin → WebView 的标准响应类型:

类型说明
user_permission_list用户权限列表
setting_change_theme主题变更通知
code_search_get_codesearch_code_list代码搜索结果
code_search_get_codesearch_repository_list仓库搜索结果
code_search_get_codesearch_language_list语言列表
code_search_get_code_copy_success复制成功
code_review_receiver_page_init评审页初始化
code_review_receiver_code_review代码评审数据
code_review_receiver_change_result变更结果
sql_chat_receive_source_list数据源列表
sql_chat_receive_source_types数据库类型
sql_chat_receive_link_test连接测试结果
sql_chat_receive_save保存确认
sql_chat_receive_table_list表列表
sql_chat_update_conversation_listSQL 对话更新

消息路由

WebView ──sendMessage()──► WebViewWindowPanel.handleRequest()

    ├─► 解析 JSON,提取 "type" 字段

    ├─► 匹配 WebViewDataTypeEnum

    └─► 按 getModule() 分发到 Service:
        ├─ CHAT        → ChatService.handleAction()
        ├─ LOGIN       → UserService.handleAction()
        ├─ SQL_CHAT    → SqlService.handleAction()
        ├─ CODE_SEARCH → CodeSearchService.handleAction()
        ├─ UNIT_TEST   → UnitTestService.handleAction()
        ├─ BATCH_UNIT_TEST → BatchUnitTestService.handleAction()
        ├─ CODE_CHECK  → CodeCheckService.handleAction()
        ├─ GIT_VIEW    → GitReviewService.handleAction()
        ├─ COMMON      → CommonService.handleAction()
        └─ SETTING     → CommonService.handleAction()

Service 处理:

    ├─► 构造 MessageDto
    ├─► PluginWebsocketClient.sendWsMessage()
    └─► Agent 响应后通过 send2Web() 推送回 WebView

页面导航 (PageEnum)

页面说明
chat_view主对话页面
setting_page设置页面
code_check代码检查页面
code_review代码评审页面
unit_test单元测试页面
unit_testing单元测试中页面

本项目仅供学习研究,逆向分析内容归原厂商所有。