1,官方文档地址:
https://bitbucket.org/chromiumembedded/cef/wiki/JavaScriptIntegration.md
2,我的测试代码
2.1说明:
注册变量给js使用,所以逻辑必然还是在render进程中注册:注册地方如下:
/*client_renderer.cc文件文件中的 class ClientRenderDelegate 的方法OnContextCreated*/
void OnContextCreated(CefRefPtr<ClientAppRenderer> app,
CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
CefRefPtr<CefV8Context> context) override {
message_router_->OnContextCreated(browser, frame, context);
}
//这个方法中注册
//具体实现在如下的类中
CefMessageRouterRendererSideImpl::OnContextCreated(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
CefRefPtr<CefV8Context> context){
// Register function handlers with the 'window' object.
CefRefPtr<CefV8Value> window = context->GetGlobal();
CefRefPtr<V8HandlerImpl> handler = new V8HandlerImpl(this, config_);
CefV8Value::PropertyAttribute attributes =
static_cast<CefV8Value::PropertyAttribute>(
V8_PROPERTY_ATTRIBUTE_READONLY | V8_PROPERTY_ATTRIBUTE_DONTENUM |
V8_PROPERTY_ATTRIBUTE_DONTDELETE);
//注册变量到网页上下文
CefRefPtr<CefV8Value> music_player_Info = CefV8Value::CreateObject(nullptr, nullptr);
//string
CefRefPtr<CefV8Value> string_test = CefV8Value::CreateString("musicPlayer");
music_player_Info->SetValue("StringTest", string_test, attributes);
//bool
CefRefPtr<CefV8Value> bool_test = CefV8Value::CreateBool(true);
music_player_Info->SetValue("BoolTest", bool_test, attributes);
//Int
CefRefPtr<CefV8Value> Int_test = CefV8Value::CreateInt(10);
music_player_Info->SetValue("IntTest", Int_test, attributes);
obj_music_player->SetValue("clientInfo", music_player_Info, attributes);
window->SetValue("MusicPlayer",obj_music_player, attributes);
}