环境

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调用

upload successful

后台日志

upload successful



JCEF      jcef js 调用java

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!