javascript 与 c 交互-使用Cef实现C++和JavaScript交互

2023-08-29 0 6,273 百度已收录

使用场景:

在pc客户端中javascript 与 c 交互,很多应用场景还涉及到一些需要嵌入h5页面的模块javascript 与 c 交互,以实现高效的开发和交互

其工作原理其实类似于 electron 原理 , 所以很好理解

NimCefWebInstance全局对象扩展了call方法和register方法,分别提供后端调用C++方法和注册本地方法供C++调用。

代码就不多说了:

根据项目编码需要进行封装(使用的方法名都是C++开发指定的契约)

Bridge.js

/**
 *
 * @param {*} exce  C++ 接口名
 * @param {*} message  传参
 */
export const nativeCall = (exce, message) =>
  new Promise(resolve => {
    window.NimCefWebInstance.call(
      exce,
      {
        message
      },
      (err, { message }) => resolve(message)
    );
  });
// 打开系统浏览器
export const OpenSystemBrowser = async (
  data,
  exce = "NativeExecutePrivilege"
) =>
  await nativeCall(exce, {
    operation: "OpenSystemBrowser",
    data
  });

一般用法(点击打开系统默认浏览器并跳转到指定链接)

// import 封装的方法
import { OpenSystemBrowser } from "@utils/js/Bridge";
/**
 * @OpenSystemBrowser {*} => 和 C++ 约定好的 交互接口名称
 * @param {*} => 传递参数
 * @open_url => 跳转地址
 */
openSystemBrowser(){
   let param = {
      open_url: item.jump_url
    };
   OpenSystemBrowser(param, "NativeExecutePrivilege");
}

注册一个js方法来调用原生C++

/**
 *
 * @param {*} name 函数名
 * @param {*} callback 指向函数
 */
export const register = (name, callback) => {
  console.log(`call: register @${name}`);
  window.NimCefWebInstance.register(name, callback);
};
//  注意:调用C++的方法 都必须在dom加载完之后
export const clientisready = callback => {
  document.onreadystatechange = () => {
    register("clientisready", callback);
  };
};

import { clientisready } from "@utils/js/Bridge";
mounted() {
	clientisready(this.getMessage)
},
methods: {
    getMessage() {
      return {
        message:
          "showJs function was executed, this message return by   		JavaScript."
      };
    },

至此,C++和JavaScript使用CEF的实现就基本完成了。 后续会有更多实用方法分享,持续关注……

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 javascript javascript 与 c 交互-使用Cef实现C++和JavaScript交互 https://www.wkzy.net/game/177617.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务