跳到主要内容

事件与策略回调

通过 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_closedWebContents 已关闭,句柄仍需宿主销毁

同步策略回调

下列 callback 必须立即返回决策,不应执行销毁 View、关闭 Runtime 等破坏性操作:

  • on_close_requested
  • on_before_popup
  • on_console_message
  • on_before_request
  • on_before_download

on_before_popup 允许弹窗时还必须注册 on_popup_created。新 popup View 由宿主持有,最终通过 ltv_view_destroy() 释放。

需要异步回复的请求

对话框、证书错误、文件选择和下载目标通过 ID 建立一次性请求:

Callback完成函数
on_javascript_dialogltv_view_reply_to_javascript_dialog()
on_certificate_errorltv_view_reply_to_certificate_error()
on_file_dialogltv_view_reply_to_file_dialog()
on_before_downloadltv_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