环境
jcef 版本 49.87
jdk jdk8 32 位
os win 10
定义消息处理
// Copyright (c) 2014 The Chromium Embedded Framework Authors. All rights
// reserved. Use of this source code is governed by a BSD-style license that
// can be found in the LICENSE file.
package com.cares.fids.client.handler;
import com.cares.fids.client.javascript.JavascriptHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.cef.browser.CefBrowser;
import org.cef.callback.CefQueryCallback;
import org.cef.handler.CefMessageRouterHandlerAdapter;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.concurrent.ConcurrentHashMap;
@Slf4j
@Component
public class MessageRouterHandler extends CefMessageRouterHandlerAdapter {
@Resource
ApplicationContext applicationContext;
private ConcurrentHashMap<String, JavascriptHandler> handlers = new ConcurrentHashMap<>(10);
@Override
public boolean onQuery(CefBrowser browser, long query_id, String request, boolean persistent, CefQueryCallback callback) {
log.debug("query_id={},request={},persistent={},callback={}", query_id, request, persistent, callback);
if (StringUtils.isNotEmpty(request)) {
JavascriptHandler javascriptHandler = handlers.get(request);
if (null != javascriptHandler) {
javascriptHandler.handleJavascript();
}
callback.success("调用成功");
}
return true;
}
@PostConstruct
public void init() {
handlers.clear();
applicationContext.getBeansOfType(JavascriptHandler.class)
.entrySet().stream().forEach(e -> handlers.put(e.getKey(), e.getValue()));
}
}
配置bean
@Bean
public CefClient cefClient(CefApp cefApp,
KeyboardHandler keyboardHandler,
MessageRouterHandler messageRouterHandler) {
CefClient client_ = cefApp.createClient();
client_.addKeyboardHandler(keyboardHandler);
client_.addLifeSpanHandler(new LifeSpanHandler(client_, false, false));
CefMessageRouter.CefMessageRouterConfig cefMessageRouterConfig = new CefMessageRouter.CefMessageRouterConfig("invokeJava", "cancelJava");
CefMessageRouter cefMessageRouter = CefMessageRouter.create(cefMessageRouterConfig);
cefMessageRouter.addHandler(messageRouterHandler, true);
client_.addMessageRouter(cefMessageRouter);
return client_;
}
js调用
后台日志
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!