Jcef 例子4_JCEF中js与java交互、js与java相互调用

boyanx3个月前技术教程14

调用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参数取得方法名,调用用之

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试打开静态文件</title>
</head>
<body>
    <h1>测试sendMessage2Java</h1>

    <button onclick="globalVar.f.sendMessage2Java('sendMessage2JavaTest')">sendMessage2Java</button>

    <script>
        var globalVar = globalVar || {};
        globalVar.f = globalVar.f || {}
        globalVar.v = globalVar.v || {}

        globalVar.v.fieldNm_fQuery = 'fQuery';
        globalVar.v.fieldNm_fQueryCancel = 'fQueryCancel';

        globalVar.f.parseUrlParamObj = function(){
            // 1. 获取URL中的所有参数
            const urlSearchParams = new URLSearchParams(window.location.search);
            // 2. 定义一个空对象来存储参数
            const params = {};
            // 3. 遍历参数并将其添加到对象中
            for (const [key, value] of urlSearchParams.entries()) {
                params[key] = value;
            }
            // 4. 返回参数对象
            return params;
        }

        const urlParamObj = globalVar.f.parseUrlParamObj();
        if(urlParamObj.hasOwnProperty(globalVar.v.fieldNm_fQuery)){
            urlParamObj[globalVar.v.fieldNm_fQuery];
        }else{
            throw new Error("未找到参数【" + globalVar.v.fieldNm_fQuery + "】");
        }

        if(urlParamObj.hasOwnProperty(globalVar.v.fieldNm_fQueryCancel)){
            urlParamObj[globalVar.v.fieldNm_fQueryCancel];
        }else{
            throw new Error("未找到参数【" + globalVar.v.fieldNm_fQueryCancel + "】");
        }

        globalVar.f.sendMessage2Java = function(request){
            // 即 window.csh_Query({...})
            window[urlParamObj[globalVar.v.fieldNm_fQuery]]({
                request: request,
                onSuccess: function(response) {
                    alert("onSuccess:" + response);
                    globalVar.v.sendMessage2Java_response_onSuccess = response;
                },
                onFailure: function(error_code, error_message) {
                    alert("error_code:" + error_code);
                    alert("error_message:" + error_message);
                    globalVar.v.sendMessage2Java_error_code = error_code;
                    globalVar.v.sendMessage2Java_error_message = error_message;
                }
            });
        }


    </script>
</body>
</html>

示例如图:


标签: js弹窗

相关文章

给大伙支两招,一键去网页跳转弹窗

很多网页都加入了一个鸡贼的操作——「打开 App 阅读全文」。明明可以一次性把内容展示出来,非得给你隐藏一半,剩下一半需要下载 App 才能看。要不是隔着一条网线,这种话说到一半的人,真的,应该拖出去...

人民日报批弹窗广告怎么回事?会带来木马植入信息诈骗强制消费等问题 怎么彻底关闭广告?

在办公室或者是使用浏览器等软件的时候最烦人的就是广告,尤其是突然弹出在页面上的那种你都找不到能点叉的地方。今日人民日报发文批弹窗广告,称“弹窗广告”肆意而为,不仅影响上网者的心情和工作效率,还会带来木...

极致舒适的Vue弹窗使用方案_vue页面弹窗太多如何处理

一个Hook让你体验极致舒适的Dialog使用方式!Dialog地狱为啥是地狱?因为凡是有Dialog出现的页面,其代码绝对优雅不起来!因为一旦你在也个组件中引入Dialog,就最少需要额外维护一个v...

php手把手教你做网站(十七)vue实现提示弹窗效果,ie不支持vue

我是把弹窗的html都写在了页面app里边。1、html代码<div class="layui-body" id="app"> <div &g...

VUE前端编程:简单实现一个通用等待弹窗

在后端服务调用等待时,为防止前端误操作,一般会在前端实现一个等待弹窗,今天简单实现了一个,效果如下图:作用嘛,一个是遮罩前端页面,二是提供信息提示,告知用户正在做什么操作,用了多长时间等等。实现方式如...

JavaScript 关闭浏览器 (不弹出提示框)

一段JavaScript脚本程序, 负责关闭窗口, 如果网页不是通过脚本程序打开的(window.open()), 调用window.close()脚本关闭窗口前, 必须先将window.opener...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。