CEF方面的研究(五) CEF中C++与JS交互

2023-05-16

C++与JS的交互,相信不用多说,必是精髓。

在写这篇博客之前,我不得不说之前遇到的一个问题:不管怎么搞,都不能回调到C++函数中。原因是什么呢?我没有实例化Cefapp。不实例化cefapp也能加载出页面,正常的进行显示,但是在js代码中写回调,回调不到C++中!为什么会犯这么低级的错误呢?实际上,在刚刚接触CEF代码时,真的是一头雾水,在网上各种抄代码,抄的最后“四不像”。以至于,自己的代码都是东拼西凑出来的,里面的逻辑一团糟。到研究到交互时,完了,怎么搞都回调不上来,什么settings.single_process = true啊,统统不好使。(不过这个是将来断点调试的关键代码!大家必须写上!)

下面,我来给大家写一下该怎么进行回调。

一、首先clientapp类应该继承CefRenderProcessHandler类,然后重写virtual void OnContextCreated(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame,CefRefPtr<CefV8Context> context) OVERRIDE;这个函数。这个函数就是用来绑定js的回调函数的。

二、其次写一个重载CefV8Handler的子类,重写virtual bool Execute(
const CefString& name  /*JavaScript调用的C++方法名字*/,
CefRefPtr<CefV8Value> object /*JavaScript调用者对象*/, 
const CefV8ValueList& arguments /*JavaScript传递的参数*/, 
CefRefPtr<CefV8Value>& retval /*返回给JS的值设置给这个对*/, 
CefString& exception/*通知异常信息给JavaScript*/);函数,将来js的函数会回调到这里。

三、在html代码中假如window打头的回调函数代码。

接下来,我给大家举个例子。

OnContextCreated函数中添加如下代码:

CefRefPtr<CefV8Value> window = context->GetGlobal();// 获取到window
// 添加js创建函数
CefRefPtr<CefV8Value> func = CefV8Value::CreateFunction("NativeLogin", m_v8Handler);//new ClientAppExtensionHandler(this));
window->SetValue("NativeLogin", func, V8_PROPERTY_ATTRIBUTE_NONE);

Execute中添加如下代码

if (name == "NativeLogin") 
{
if (arguments.size() == 2)
{
CefString strUser = arguments.at(0)->GetStringValue();
CefString strPassword = arguments.at(1)->GetStringValue();


TCHAR szLog[256] = { 0 };
_stprintf_s(szLog, 256, _T("user - %s, password - %s\r\n"), strUser.c_str(), strPassword.c_str());
OutputDebugString(szLog);
}
return true;
}

网页中代码可以这么写

function Login(){
        //alert(window.NativeLogin(document.getElementById("userName").value, document.getElementById("password").value));
window.NativeLogin(document.getElementById("userName").value, document.getElementById("password").value);
 
 }


<form>
UserName: <input type="text" id="userName" />&nbsp;&nbsp;Password: 
<input type="text" id="password" />&nbsp;&nbsp;<input  type="button" value="Login" οnclick="Login()"/></form>


这样点击网页上Login按钮时,在Execute函数中打断点,就会进到函数体内。这样一个简单的js回调就完成了。

如果想要扩展其灵活性,就需要读者对其下功夫了,举一反三触类旁通嘛!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CEF方面的研究(五) CEF中C++与JS交互 的相关文章

  • cef中js与C++交互

    cefquery方式交互 前端使用 window span class token punctuation span span class token function cefQuery span span class token punc
  • CEF方面的研究(五) CEF中C++与JS交互

    C 43 43 与JS的交互 xff0c 相信不用多说 xff0c 必是精髓 在写这篇博客之前 xff0c 我不得不说之前遇到的一个问题 xff1a 不管怎么搞 xff0c 都不能回调到C 43 43 函数中 原因是什么呢 xff1f 我没
  • CEF:C++和JS交互

    C 43 43 和JS交互V8原理 xff1a https github com fanfeilong cefutil blob master doc content register v8 extension md CEF一个页面的框架如
  • Go 在 Windows 上用户图形界面 GUI 解决方案 Go-WinGUI 国产(使用cef 内核)

    Go 在 Windows 上用户图形界面 GUI 解决方案 Go WinGUI 国产 xff08 使用cef 内核 xff09 参考文章 xff1a xff08 1 xff09 Go 在 Windows 上用户图形界面 GUI 解决方案 G
  • CEF中JavaScript与C++交互

    在CEF里 xff0c JS和Native xff08 C C 43 43 xff09 代码可以很方便的交互 xff0c 这里https bitbucket org chromiumembedded cef wiki JavaScriptI
  • 一步步CEF(2)之编译ceflicent

    一步步CEF xff08 1 xff09 之编译libcef dll wrapper lib已经提供了c 43 43 的静态库 xff0c 这次要将cefclient编译出来 这里要说明一下 xff0c 如果仅仅将cefclient编译的话
  • CEF(Chromium Embedded Framework)使用说明书

    CEF使用说明书 目录 1 前言 1 1 CEF的作用 1 2 CEF的下载和编译 1 3 CEF结构 1 3 1 CEF进程和窗口之间的结构关系 1 3 2 Renderer进程的实现结构 1 3 3 browser进程的实现结构 1 4
  • cef相关

    一 应用 在Windows下进行浏览器相关的开发 1 使用IE相关的接口 IE控件等进行开发 Windows提供了丰富的接口用起来也是非常方便的 缺点 例如XP还有很多人使用 它的IE版本可能比较旧 对一些新的网页特性可能支持的不好 2 使
  • cef浏览器加载过程实测ILoadHandler和IRequestHandler

    针对方法GetResourceRequestHandler 获取资源请求过程中 会多次发生请求 不知道何时加载完的问题 IRequestHandler 没有了OnResourceLoadComplete 和OnBeforeResourceL
  • 01-Chrome架构:仅仅打开了1个页面,为什么有4个进程

    在开始之前 我们一起看下 Chrome打开一个页面需要启动多少进程 你可以点击Chrome浏览器右上角的 选项 菜单 选择 更多工具 子菜单 点击 任务管理器 这将打开Chrome的任务管理器的窗口 如下图 和Windows任务管理器一样
  • Cef经典N大问题

    1 cef启动 退出的时候怎么崩溃了 答 如果是启动时崩溃 请看资源目录是否文件都齐全 退出的话见https github com fanfeilong cefutil blob master doc CEF Close md 如果是cen
  • 自编译已集成视频播放功能CEF3.3239版本库 (官方版本编译类似)详解介绍步骤(含编译错误解决)

    工具及编译环境 VS2015 Cmake cmake官网 https cmake org CEF工程官网 https cef builds spotifycdn com index html 1 下载CEF源码 下面的源码是已经集成了播放视
  • cef3:禁止win10高dpi下cef对内部网页进行缩放

    cef对内部网页进行缩放
  • Linux下编译CEF源码及交叉编译

    Linux下编译CEF chromium源码及交叉编译 官方编译文档 https bitbucket org chromiumembedded cef wiki MasterBuildQuickStart markdown header l
  • Qt浏览器开发:关于CEF开发知识点以及QCef开发原理与使用

    开发环境 VS2015 Qt5 9 关于CEF CEF全称是Chromium Embedded Framework 它是Chromium的Content API的封装库 基于Google Chromium 的开源项目 而Google Chr
  • QCefView源码优化

    QCefView项目源码的构建部分这里就不赘述了 有问题的朋友可以回到 QCefView 1 CMAKE项目 库文件生成和项目测试 查看相关介绍 本次优化主要包括以下几个部分 1 设置部分 关闭代理服务器 关闭同源策略 使用系统flash等
  • qt集成cef QWidget

    编译libcef dll wrapper 假设你已经编译出了libcef dll wrapper lib Debug和Release版本 并且对应版本的程序集类型分别是 MDd和MD qt的运行时库是MDd类型的 因此cef3编译的时候也应
  • xe7 安装chrome组件(CEF4Delphi)

    缘起 大屏项目需要用到chrome组件 但为了实现firemonkey的矢量和强大的图形功能 所以只能重新在xe7中安装chrome组件 碰到了一些问题 都一 一化解了 将整个过程记录下来 以供大家采用 1 下载CEF4Delphi mas
  • cef编译

    按照大神的一遍过 具体过程非常详细 链接https kefong blog csdn net article details 119908780 spm 1001 2101 3001 6650 2 utm medium distribute
  • 禁用CEF跟随系统的DPI缩放

    方法1 为程序添加启动参数 high dpi support 1 force device scale factor 1 1 在桌面上右键Chrome图标 选择属性 2 在目标一栏中增加自定义参数 force device scale fa

随机推荐