4. WebView→Java JS Bridge 消息格式
4.1 消息发送机制 (三种 IDE)
IDEA (JCEF)
javascript
// JS → Java
window.myObject.sendMessage(JSON.stringify({ type, value }))
// Java → JS
CefBrowser.executeJavaScript("window.receiveData(" + json + ")")VSCode
javascript
// JS → Java
vscode.postMessage({ type, value: JSON.stringify(value) })
// Java → JS
window.addEventListener("message", (event) => {
handlerReceivedMsg(event.data.type, event.data.value)
})Eclipse
javascript
// JS → Java
window.sendMessage(JSON.stringify({ type, value: JSON.stringify(value) }))
// Java → JS
window.receiveData = function(data) {
handlerReceivedMsg(JSON.parse(data).type, JSON.parse(data).value)
}4.2 JS→Java 消息完整映射表
从 WebView 源码提取的所有 JS→Java 消息类型:
CHAT 模块 (14 条)
| 消息类型 | value 格式 | 敏感数据 | 文件来源 |
|---|---|---|---|
CHAT:SEND_MSG | {inputText, type, intelligent, sessionId, knowledge, relatedFiles, code} | 用户输入, 代码 | sendMsgMode |
CHAT:RESEND | {id, sessionId, type} | 无 | sendMsgMode |
CHAT:STOP_RESPONSE | {sessionId} | 无 | sendMsgMode |
CHAT:SET_MODEL | modelCode | 无 | sendMsgMode |
CHAT:REFRESH_MODEL | 无 | 无 | sendMsgMode |
CHAT:DELETE_MSG | {messageId} | 无 | sendMsgMode |
CHAT:DELETE_HISTORY_ITEM | {sessionId} | 无 | index-f0296668 |
CHAT:DELETE_HISTORY_ITEM_ALL | {} | 无 | index-f0296668 |
CHAT:GET_HISTORY_LIST | 无 | 无 | index-f0296668 |
CHAT:CHOOSE_HISTORY_ITEM | sessionId | 无 | index-df569310 |
CHAT:NEW_CHAT | 无 | 无 | index-f0296668 |
CHAT:GET_IDE_FILE_STATE | {isRecommend?, isGetData?} | 无 | sendMsgMode |
CHAT:GET_CODE_KNOWLEDGE_LIST | 无 | 无 | sendMsgMode |
CHAT:GET_DOC_KNOWLEDGE_LIST | 无 | 无 | sendMsgMode |
CHAT:CHOOSE_FILE | 无 | 无 | sendMsgMode |
CHAT:GET_OPEN_DIR_LIST | 无 | 无 | sendMsgMode |
CHAT:VALID_WEBSITE | url | URL | sendMsgMode |
CHAT:AGENT_REFRESH | 无 | 无 | index-df569310 |
SQL_CHAT 模块 (8 条)
| 消息类型 | value 格式 | 敏感数据 | 文件来源 |
|---|---|---|---|
SQL_CHAT:SEND_MSG | {intelligent, params: {sqlInfo}} | SQL 查询 | sendMsgMode |
SQL_CHAT:SQL_LINK_TEST | {client, host, port, user, password, database} | 数据库密码 | index-3c7ef179 |
SQL_CHAT:SQL_SAVE | {sourceId, client, host, port, user, password, database} | 数据库密码 | index-3c7ef179 |
SQL_CHAT:SOURCE_LIST | {sourceId?, refreshFlag?} | 无 | index-3c7ef179 |
SQL_CHAT:TABLE_LIST | {sourceId, database} | 无 | index-3c7ef179 |
SQL_CHAT:REQUEST_SOURCE_TYPES | 无 | 无 | index-3c7ef179 |
SQL_CHAT:SOURCE_DELETE | sourceId | 无 | index-3c7ef179 |
SQL_CHAT:NEW_CHAT | 无 | 无 | index-3c7ef179 |
SQL_CHAT:STOP_RESPONSE | 无 | 无 | sendMsgMode |
CODE_CHECK 模块 (2 条)
| 消息类型 | value 格式 | 敏感数据 |
|---|---|---|
CODE_CHECK:REQUEST_CODE_CHECK_LIST | 无 | 无 |
CODE_CHECK:FIX | {issueId, fixCode} | 修复代码 |
CODE_REVIEW 模块 (4 条)
| 消息类型 | value 格式 | 敏感数据 |
|---|---|---|
CODE_REVIEW:PAGE_READY | 无 | 无 |
CODE_REVIEW:GET_CODEREVIEW_LIST | {path} | 无 |
CODE_REVIEW:GET_CHANGE_RESULT | {filePath, changeId} | 无 |
CODE_REVIEW:GET_CHANGE_RESULT_END | true | 无 |
CODE_SEARCH 模块 (3 条)
| 消息类型 | value 格式 | 敏感数据 |
|---|---|---|
CODE_SEARCH:REQUEST_CODESEARCH_CODE_LIST | {query, repo, language} | 无 |
CODE_SEARCH:REQUEST_CODESEARCH_REPOSITORY_LIST | 无 | 无 |
CODE_SEARCH:REQUEST_CODESEARCH_LANGUAGE_LIST | 无 | 无 |
UNIT_TEST 模块 (7 条)
| 消息类型 | value 格式 | 敏感数据 |
|---|---|---|
UNIT_TEST:PAGE_READY | 无 | 无 |
UNIT_TEST:FUNCTION_CASE | {filePath, className, methodName} | 无 |
UNIT_TEST:FUNCTION_CASE_CODE | {caseId} | 无 |
UNIT_TEST:SAVE_CODE | {filePath, testCode} | 测试代码 |
UNIT_TEST:REGENERATE | {params} | 无 |
UNIT_TESTING:MAPPING_FILE | {params} | 无 |
UNIT_TEST:SAVE | {params} | 无 |
BATCH_UNIT_TEST 模块 (4 条)
| 消息类型 | value 格式 | 敏感数据 |
|---|---|---|
BATCH_UNIT_TEST:CREATE | {filePaths, options} | 无 |
BATCH_UNIT_TEST:GET_LIST | 无 | 无 |
BATCH_UNIT_TEST:DOWNLOAD | taskId | 无 |
BATCH_UNIT_TEST:DELETE | taskId | 无 |
UNIT_TEST_BANK 模块 (2 条)
| 消息类型 | value 格式 | 敏感数据 |
|---|---|---|
UNIT_TEST_BANK:PAGE_READY | 无 | 无 |
UNIT_TEST_BANK:SAVE | {params} | 无 |
GIT 模块 (4 条)
| 消息类型 | value 格式 | 敏感数据 |
|---|---|---|
GIT:GET_STATUS | {} | 无 |
GIT:SAVE_TOKEN | {token, repoType} | Git Token |
GIT:AUTHORIZE | {token, repoType} | Git Token |
GIT:RE_INDEX | {params} | 无 |
LOGIN 模块 (4 条)
| 消息类型 | value 格式 | 敏感数据 |
|---|---|---|
LOGIN:INIT | {showInfo: true} | 无 |
LOGIN:LOGIN_ABORT | 无 | 无 |
LOGIN:LOGIN_CHECK | 无 | 无 |
LOGIN:LOGOUT | 无 | 无 |
LOGIN:CLOSE_QR_CODE | 无 | 无 |
SETTING 模块 (4 条)
| 消息类型 | value 格式 | 敏感数据 |
|---|---|---|
SETTING:UPDATE_CONFIG | {key, value} | 可能含配置 |
SETTING:GET_CAN_OPEN_CODE_ENHANCE | 无 | 无 |
SETTING:SAVE_SHOW_OPERATE_GUIDANCE | {isShowOperateGuide} | 无 |
SETTING:POPUP_KEYMAP_SETTINGS | 无 | 无 |
COMMON 模块 (8 条)
| 消息类型 | value 格式 | 敏感数据 |
|---|---|---|
COMMON:PAGE_READY | 无 | 无 |
COMMON:OPEN_URL | {url} | URL |
COMMON:FOCUS_FILE | {filePath, line} | 无 |
COMMON:FOCUS_FILE_LINE | {filePath, line} | 无 |
COMMON:CODE_CLICK_ACTION | {type, content} | 代码内容 |
COMMON:OPEN_FILE_DIALOG | {params} | 无 |
COMMON:EVALUATION | {messageId, type} | 无 |
COMMON:FEEDBACK | {messageId, type, content} | 无 |
COMMON:DOWNLOAD_TABLE | {params} | 无 |
5. Java→WebView 回调格式
5.1 回调发送机制
java
// Java 端
void sendMessage2webView(String type, Object data) {
String json = new Gson().toJson(Map.of("type", type, "data", data));
browser.getCefBrowser().executeJavaScript(
"window.receiveData(" + json + ")",
browser.getCefBrowser().getURL(),
0
);
}5.2 Java→JS 消息完整映射表
从 handlerReceivedMsg() switch/case 提取的所有 Java→JS 消息类型:
| 消息类型 | 处理方法 | 数据内容 | 含加密数据 |
|---|---|---|---|
CHAT:AGENT_ERROR | hanldeAgentError | {error, message} | 无 |
CHAT:GET_USER_INFO | receiveUserInfo | {userName, avatar, ...} | 无 |
CHAT:GET_CONVERSATION | getConversation | {messages: [...]} | 无 |
CHAT:UPDATE_CONVERSATION_LIST | updateConversationList | {conversation} | 无 |
CHAT:UPDATE_SELECT_CODE | updateSelectCode | {code, range} | 无 |
CHAT:SET_SEND_MESSAGE_TYPE | setSendMessageType | {type} | 无 |
CHAT:GET_MODEL_LIST | getModelList | {models: [...]} | 无 |
CHAT:PREDICT | updatePredictList | {predictions} | 无 |
CHAT:RECEIVER_IDE_FILE_STATE | getIdeFileState | {files, isRecommend} | 无 |
CHAT:RECEIVER_DOC_KNOWLEDGE_LIST | getDocKnowledgeInfo | {documents} | 无 |
CHAT:RECEIVER_CODE_KNOWLEDGE_LIST | getCodeKnowledgeInfo | {repositories} | 无 |
CHAT:SEND_OPEN_DIR_LIST | getOpenDirListInfo | {dirs} | 无 |
CHAT:RECEIVER_HISTORY_LIST | receiveHistoryList | {conversations} | 无 |
CHAT:GET_FEEDBACK_LIST | receiveFeedBackCheckList | {categories} | 无 |
CHAT:CHOOSE_FILE | receiveUploadFile | {filePath} | 无 |
CHAT:SEND_VALID_WEBSITE_RESULT | getValidWebsiteResult | {isValid, url} | 无 |
CHAT_TALK:RECEIVER_RECOMMEND_GAMEPLAY | receiveRecommendList | {recommendations} | 无 |
LOGIN:RECEIVER_LOGIN_IFRAME_SRC | receiveLoginIframeSrc | {url} | 无 |
LOGIN:LOGIN_SUCCEED | receiveLoginSuccess | {token?, userInfo?} | 可能含 Token |
LOGIN:GO_LOGIN | goLoginClickPage | 无 | 无 |
SETTING:GET_CONFIG | getSettingInfo | {settings} | 无 |
SETTING:CHANGE_THEME | changeTheme | {theme} | 无 |
SETTING:GET_CAN_OPEN_CODE_ENHANCE | changeCodeEnhanceEnabled | {enabled} | 无 |
SETTING:RECEIVE_REPO_STATUS | receiveRepoStatus | {status} | 无 |
SETTING:SEND_SHOW_OPERATE_GUIDANCE | receiveOperateGuideData | {isShow} | 无 |
COMMON:OPEN_PAGE | openPage | {page} | 无 |
COMMON:SHOW_MESSAGE_IN_WEB | showMessageInWeb | {message} | 无 |
COMMON:PLUGIN_BASE_INFO | getPluginBaseInfo | {version, ...} | 无 |
CODE_CHECK:GET_CODE_CHECK_LIST | getCodeCheckList | {issues} | 无 |
CODE_CHECK:UPDATE_CODE_CHECK | updateCodeCheckList | {issue} | 无 |
CODE_REVIEW:RECEIVER_PAGE_INIT | receiveCodeReviewInit | {initData} | 无 |
CODE_REVIEW:RECEIVER_CODE_REVIEW | receiveCodeReview | {review} | 无 |
CODE_REVIEW:RECEIVER_CHANGE_RESULT | receiveChangeResult | {change} | 无 |
CODE_SEARCH:GET_CODESEARCH_CODE_LIST | getCodeSearchCodeList | {results} | 无 |
CODE_SEARCH:GET_CODESEARCH_REPOSITORY_LIST | getCodeSearchRepositoryList | {repos} | 无 |
CODE_SEARCH:GET_CODESEARCH_LANGUAGE_LIST | getCodeSearchLanguageList | {languages} | 无 |
SQL_CHAT:RECEIVE_SOURCE_TYPES | sqlReceiveSourceTypes | {types} | 无 |
SQL_CHAT:RECEIVE_LINK_TEST | sqlReceiveLinkTest | {success, message} | 无 |
SQL_CHAT:RECEIVE_SAVE | sqlReceiveSave | {success} | 无 |
SQL_CHAT:SOURCE_REFRESH_SAVE | sqlSourceRefreshReceiveSave | {success} | 无 |
SQL_CHAT:RECEIVE_SOURCE_LIST | sqlReceiveSourceList | {sources} | 含连接信息 |
SQL_CHAT:RECEIVE_TABLE_LIST | sqlReceiveTableList | {tables} | 无 |
SQL_CHAT:GET_CONVERSATION | sqlGetConversation | {messages} | 无 |
SQL_CHAT:UPDATE_CONVERSATION_LIST | sqlUpdateConversationList | {conversation} | 无 |
UNIT_TEST:GET_UT_INFO | addUTContent | {testInfo} | 无 |
UNIT_TEST:GET_METHOD_CASE | receiveClassCaseData | {cases} | 无 |
UNIT_TEST:GET_CASE_CODE | receiveCaseCode | {code} | 无 |
UNIT_TEST:GET_ALL_CODE_FILE | receiveSaveMessage | {files} | 无 |
UNIT_TEST:FUNCTION_LIST | unitTestFunctionList | {functions} | 无 |
UNIT_TEST:RECEIVE_FUNCTION_CASE | unitTestFunctionCase | {case} | 无 |
UNIT_TEST:RECEIVE_FUNCTION_CASE_CODE | unitTestFunctionCode | {code} | 无 |
BATCH_UNIT_TEST:GET_TASK_LIST | getMultiTestTaskList | {tasks} | 无 |
BATCH_UNIT_TEST:MESSAGE | multiTestMessage | {message} | 无 |
BATCH_UNIT_TEST:REFRESH_TASK_DOWNLOAD_STATUS | multiTestRefreshTaskDownloadStatus | {status} | 无 |
UNIT_TEST_BANK:RECEIVE_FUNCTION | receiveTestBankFunctionData | {functions} | 无 |
UNIT_TEST_BANK:RECEIVE_DATA | receiveTestBankData | {data} | 无 |
UNIT_TEST_BANK:RESPONSE_SAVE | receiveTestBankSave | {success} | 无 |
UNIT_TEST_BANK:IDEA_STOP | stopUnitTestBank | 无 | 无 |
USER:PERMISSION_LIST | getPermissionCodeList | {permissions} | 无 |
GIT:STATUS | updateGitStatusList | {status} | 无 |
结论: 所有 Java→JS 回调均不包含加密数据。 数据以明文 JSON 推送到 WebView。