Jcef 例子4_JCEF中js与java交互、js与java相互调用
调用jcef核心代码
CefMessageRouter msgRouter = CefMessageRouter.create(new CefMessageRouter.CefMessageRouterConfig(
"csh_Query",// 定义方法
"csh_QueryCancel"// 定义取消方法
));
// 向消息路由器添加一个处理器,第二个参数为true表示这个处理器是主处理器。
msgRouter.addHandler(new CshJcefJsBridgeHandlerDemo(), true);
// 将配置好的消息路由器添加到CEF客户端中,以便它可以开始处理来自JavaScript的调用。
client_.addMessageRouter(msgRouter);
CshJcefJsBridgeHandlerDemo
收到js调用,直接返回反转后的文字,并调用js弹出提示信息:
package com.virhuiai.JBCefBrowser.handler;
import org.cef.browser.CefBrowser;
import org.cef.browser.CefFrame;
import org.cef.callback.CefQueryCallback;
import org.cef.handler.CefMessageRouterHandlerAdapter;
public class CshJcefJsBridgeHandlerDemo extends CefMessageRouterHandlerAdapter {
@Override
public boolean onQuery(CefBrowser browser, CefFrame frame, long query_id, String request,
boolean persistent, CefQueryCallback callback) {
// 返回影响成功的数据
callback.success(new StringBuilder(request).reverse().toString());
browser.executeJavaScript("alert('成功接收到js的调用')",null,1);// 调用js中定义的方法
return true;
}
}
html文件
核心就是调用:
window.csh_Query({...});// 方法名是在上面jcef中设置的,接着用jcef打开html文件。
启动后,根据url参数取得方法名,调用用之
测试打开静态文件
测试sendMessage2Java
示例如图: