事件与策略回调
通过 ltv_view_client_t 为每个 View 注册事件和策略。所有 callback 都在 LitheView UI 线程执行,参数默认只在 callback 期间有效。
初始化 Client
ltv_view_client_t client = {};
client.struct_size = sizeof(client);
client.version = LTV_STRUCT_VERSION;
client.user_data = &app;
client.on_loading_changed = &OnLoadingChanged;
client.on_url_changed = &OnUrlChanged;
client.on_title_changed = &OnTitleChanged;
client.on_load_error = &OnLoadError;
ltv_view_t view = ltv_view_create_with_client(&client);
未使用的字段保持 nullptr。
状态事件
| Callback | 触发时机 |
|---|---|
on_loading_changed | 页面开始或结束加载 |
on_url_changed | 主框架 URL 提交 |
on_title_changed | 文档标题变化 |
on_load_error | 主框架加载失败 |
on_navigation_state_changed | 后退、前进或 loading 状态变化 |
on_renderer_terminated | 主 renderer 异常终止 |
on_closed | WebContents 已关闭,句柄仍需宿主销毁 |
同步策略回调
下列 callback 必须立即返回决策,不应执行销毁 View、关闭 Runtime 等破坏性操作:
on_close_requestedon_before_popupon_console_messageon_before_requeston_before_download
on_before_popup 允许弹窗时还必须注册 on_popup_created。新 popup View 由宿主持有,最终通过 ltv_view_destroy() 释放。
需要异步回复的请求
对话框、证书错误、文件选择和下载目标通过 ID 建立一次性请求:
| Callback | 完成函数 |
|---|---|
on_javascript_dialog | ltv_view_reply_to_javascript_dialog() |
on_certificate_error | ltv_view_reply_to_certificate_error() |
on_file_dialog | ltv_view_reply_to_file_dialog() |
on_before_download | ltv_view_reply_to_download() |
只有宿主确定会完成请求时才返回 handled。每个 ID 只能完成一次;导航、View 销毁或其他生命周期变化可能取消未决请求。
下载状态
on_download_updated 提供目标路径、已接收字节、总大小、速度、百分比和终止原因。接受下载后可以调用:
ltv_view_pause_download(view, download_id);
ltv_view_resume_download(view, download_id);
ltv_view_cancel_download(view, download_id);
JavaScript 与 GPU
on_javascript_message接收window.litheview.postMessage(value)。on_gpu_frame接收带 lease 的共享纹理帧。- GPU callback 中可以归还当前 frame,但不能销毁 View 或停止 Runtime。
详细消息格式见 JavaScript 与 Message Bridge。