У меня была такая же проблема на C ++!И я решил эту проблему с помощью следующего кода:
CefRefPtr<CefFrame> frame = browser->GetMainFrame();
CefRefPtr<CefV8Context> v8Context = frame->GetV8Context();
if (v8Context.get() && v8Context->Enter())
{
CefRefPtr<CefV8Value> object = CefV8Value::CreateObject(NULL);
// ExecuteFunctionWithContext and other actions
v8Context->Exit();
}
Документация, включенная в хром:Если V8 в настоящее время не находится внутри контекста, или если вам нужно извлечь и сохранить ссылку на контекст, вы можете использовать один из двух доступных статических методов CefV8Context.GetCurrentContext () возвращает контекст для фрейма, который в данный момент выполняет JS.GetEnteredContext () возвращает контекст для фрейма, где началось выполнение JS.Например, если функция в frame1 вызывает функцию в frame2, то текущий контекст будет frame2, а введенный контекст будет frame1.
Массивы, объекты и функции могут быть только созданы, изменены и, в случаефункций, выполняемых, если V8 находится внутри контекста.Если V8 не находится внутри контекста, то приложение должно войти в контекст, вызвав Enter (), и выйти из контекста, вызвав Exit ().Методы Enter () и Exit () должны использоваться только:
При создании объекта, функции или массива V8 вне существующего контекста.Например, при создании объекта JS в ответ на собственный обратный вызов меню.
При создании объекта, функции или массива V8 в контексте, отличном от текущего контекста.Например, если вызов, исходящий из frame1, должен изменить контекст frame2.
Так вот почему вы не смогли создать объект, но смогли создать строки js.Также вы можете увидеть пример общего использования .