示例:页面与宿主通信
Message Bridge 使用 JSON 传递业务消息,不向页面暴露原生对象或 Chromium 内部类型。
页面发送消息
<button id="save">保存</button>
<script>
document.querySelector('#save').addEventListener('click', () => {
window.litheview.postMessage({
type: 'save-document',
payload: {id: 42}
});
});
</script>
宿主接收消息
void LTV_CALLBACK OnJavaScriptMessage(
ltv_view_t view,
const ltv_javascript_message_t* message,
void* user_data) {
if (!message->is_main_frame) {
return;
}
DispatchBusinessMessage(message->json_value);
}
ltv_view_client_t client = {};
client.struct_size = sizeof(client);
client.version = LTV_STRUCT_VERSION;
client.on_javascript_message = &OnJavaScriptMessage;
ltv_view_set_client(view, &client);
json_value 和 source_url 是 callback 期间的借用字符串。如果需要异步处理,宿主必须复制内容。
宿主返回结果
ltv_view_post_javascript_message(
view,
R"({"type":"save-complete","payload":{"id":42}})");
window.litheview.onmessage = message => {
if (message.type === 'save-complete') {
showSavedState(message.payload.id);
}
};
建议每条消息都包含稳定的 type,并把业务内容放在 payload 中。对请求/响应模型,可以额外加入 requestId 进行关联。