CEF Chrome JS绑定,持有, 互相调用
Chromium 的进程
browser(没有type参数时默认为browser进程)
•renderer(kRendererProcess)
•plugin(kPluginProcess)
•ppapi-broker(kPpapiBrokerProcess)
•ppapi(kPpapiPluginProcess)
•sandbox-ipc(kSandboxIPCProcess)
•utility(kUtilityProcess)
•zygote(kZygoteProcess,linux)
•gpu-process(kGpuProcess)
本地Scheme | 加载
本地插件绑定
全局有效
本地JS – C++互相调用
在OnContextCreated中 创建 对应的Function、Object、等等自定义的变量,之后绑定在context->GetGlobal() 这个对象之中(通过 context->GetGlobal()->AddItem())
其实就是浏览器JS端的 window 对象(context->global)
这样,在浏览器内就可以通过 window 内的变量(函数、Object)来调用C++的内容了
例子:
自定义CEF小游戏通过C++层面来进行微信认证的流程图,
其中为了防止破解还特定设定了全新的Scheme,用来代替网址前面的http, https,结果实际上是打开本地的游戏文件来加载页面内容,加载可以通过文件读写等操作(也就是可以压缩、加密、防篡改)。
那异步请求怎么办,C++如何持有JS的Callback?
这里我们需要来看看CEFMessageRouter
CEF内部有一个在render进程上面跑的消息处理函数,通过onQuery可以实现后台上网、后台WebSocket等诸多神奇的效果,可以参考下面这张图
喜欢本文就在下面点一下咯!