KenTien 发表于 2025-2-21 10:30:47

CEF3专辑-进阶篇-01-cefQuery的用法

事情的起因是FB里面有个功能JS交互。我就在想CEF3如何实现的呢。就有以下的翻译
1、这是HTML/Java script要回调CEF3的代码
// The renderer-side router implementation exposes a query function and a cancel
// function via the JavaScript 'window' object:
//
//    // Create and send a new query.
//    var request_id = window.cefQuery({
//      request: 'my_request',
//      persistent: false,
//      onSuccess: function(response) {},
//      onFailure: function(error_code, error_message) {}
//    });
//
//    // Optionally cancel the query.
//    window.cefQueryCancel(request_id);
2、这里是是CEF3接受回调处的代码
// 示例用法

//

// 1. 定义路由器配置。您可以选择指定设置

//,例如 JavaScript 函数名称。浏览器和渲染器进程中的配置必须相同。如果在同一个应用程序中使用多个路由器,请确保为每个路由器配置指定唯一的函数名称。

//

// // 显示默认值的示例配置对象。

// CefMessageRouterConfig config;

// config.js_query_function = "cefQuery";

// config.js_cancel_function = "cefQueryCancel";

//

// 2. 在浏览器进程中创建 CefMessageRouterBrowserSide 的实例。

// 例如,您可以选择使其成为 CefClient 实现的成员。

//

/ browser_side_router_ = CefMessageRouterBrowserSide::Create(config);

//

// 3. 注册一个或多个 Handler。Handler 实例必须比路由器存活时间长,或者在删除之前从路由器中移除。

//

// browser_side_router_->AddHandler(my_handler);

//

// 4. 从 CefClient 实现中的其他回调(OnBeforeClose 等)调用所有必需的 CefMessageRouterBrowserSide 方法。请参阅 CefMessageRouterBrowserSide 类文档以获取完整的方法列表。

//

// 5. 在渲染器进程中创建 CefMessageRouterRendererSide 实例。

// 例如,您可以选择将其作为 CefApp 实现的成员。

//

// renderer_side_router_ = CefMessageRouterRendererSide::Create(config);

//

// 6. 从 CefRenderProcessHandler 实现中的其他回调调用所有必需的 CefMessageRouterRendererSide 方法

//(OnContextCreated 等)。请参阅 CefMessageRouterRendererSide 类

// 文档以获取完整的方法列表。

//

// 7. 从 JavaScript 代码执行查询函数。

//

// window.cefQuery({request: 'my_request',

// persistent: false,

// onSuccess: function(response) { print(response); },

// onFailure: function(error_code, error_message) {} });

//

// 8. 处理 Handler::OnQuery 实现中的查询并立即或异步执行

// 适当的回调。

//

// void MyHandler::OnQuery(int64 query_id,

// CefRefPtr<CefBrowser> browser,

// CefRefPtr<CefFrame> frame,

// const CefString& request,

// bool persistent,

// CefRefPtr<Callback> callback) {

// if (request == "my_request") {

// callback->Continue("my_response");

// return true;

// }

// return false; // 未处理。

// }

//

// 9. 请注意,onSuccess 回调是在 JavaScript 中执行的。



///

/// 用于配置查询路由器。必须将相同的值传递给

/// CefMessageRouterBrowserSide 和 CefMessageRouterRendererSide。如果使用

/// 多个路由器对,请确保选择不冲突的值。

///

页: [1]
查看完整版本: CEF3专辑-进阶篇-01-cefQuery的用法