CefV8ValueList args;
CefRefPtr<CefV8Value> retval;
CefRefPtr<CefV8Exception> exception;
if (callback_func_->ExecuteFunctionWithContext(callback_context_, NULL, args, retval, exception, false)) {
if (exception.get()) {
// Execution threw an exception.
} else {
// Execution succeeded.
}
}
retval и есть твоя функция.
Можешь зарегистрировать универсальную функцию которая будет принимать название метода, параметры, а внутри вызывать eval и возвращать результат
и солнце б утром не вставало, когда бы не было меня
погугли сабж, но внятных примеров как вызвать уже существующую в загруженной странице, передать параметры и получить результат. Везде какие-то примеры с ExecuteJavascript, но это явно не то. Кто-нибудь сталкивался?
RW>погугли сабж, но внятных примеров как вызвать уже существующую в загруженной странице, передать параметры и получить результат. Везде какие-то примеры с ExecuteJavascript, но это явно не то. Кто-нибудь сталкивался?
Условно, страница должна открываться в любом браузере или в твоем приложении? Если второе, то через IWebBrowser2 компонент мы такое делали.
Здравствуйте, Temnikov, Вы писали:
RW>>погугли сабж, но внятных примеров как вызвать уже существующую в загруженной странице, передать параметры и получить результат. Везде какие-то примеры с ExecuteJavascript, но это явно не то. Кто-нибудь сталкивался? T>Условно, страница должна открываться в любом браузере или в твоем приложении? Если второе, то через IWebBrowser2 компонент мы такое делали.
интересует только CEF, для IWebBrowser2 давно как-то делал — к счасть, отказались от IE.
Здравствуйте, Temnikov, Вы писали:
T>На вскидку SignalR из готового. Или можно просто на веб-сокетах сделать обмен, а там уже полет фантазии ничем не ограничен.
какие, извиняюсь, нафиг веб сокеты? мне просто нужно вызвать из C++ существующие функции js, это отлично делает ExecuteJavascript, но получить результат непонятно как и форматировать строчку с аргументами для вызова js функции не хочу
RW>какие, извиняюсь, нафиг веб сокеты? мне просто нужно вызвать из C++ существующие функции js, это отлично делает ExecuteJavascript, но получить результат непонятно как и форматировать строчку с аргументами для вызова js функции не хочу
RW>>как вызвать уже существующую в загруженной странице
Распарсил как, то что у тебя есть страница и тебе надо вызвать C++ функцию из какой-нибудь библиотеки.
Здравствуйте, Temnikov, Вы писали:
RW>>какие, извиняюсь, нафиг веб сокеты? мне просто нужно вызвать из C++ существующие функции js, это отлично делает ExecuteJavascript, но получить результат непонятно как и форматировать строчку с аргументами для вызова js функции не хочу
T>Распарсил как, то что у тебя есть страница и тебе надо вызвать C++ функцию из какой-нибудь библиотеки.
Здравствуйте, RonWilson, Вы писали:
RW>Привет всем,
RW>погугли сабж, но внятных примеров как вызвать уже существующую в загруженной странице, передать параметры и получить результат. Везде какие-то примеры с ExecuteJavascript, но это явно не то. Кто-нибудь сталкивался?
Здравствуйте, RonWilson, Вы писали:
RW>какие, извиняюсь, нафиг веб сокеты? мне просто нужно вызвать из C++ существующие функции js, это отлично делает ExecuteJavascript, но получить результат непонятно как и форматировать строчку с аргументами для вызова js функции не хочу
Твой код и скрипт исполняются, вообще говоря, в разных процессах. Если нужно решить побыстрее, можешь попробовать поместить параметры в глобальный объект (window.MyObject), вызвать ф-ю, которая поместит возвращаемое значение примерно туда же. Немного коряво, конечно. Я сам не пробовал.
Здравствуйте, goto, Вы писали:
G>Твой код и скрипт исполняются, вообще говоря, в разных процессах. Если нужно решить побыстрее, можешь попробовать поместить параметры в глобальный объект (window.MyObject), вызвать ф-ю, которая поместит возвращаемое значение примерно туда же. Немного коряво, конечно. Я сам не пробовал.
но, насколько я понял, ExecuteJavaScript тоже асинхронный, как же тогда получить результат сразу после ExecuteJavaScript? в CefFrame вызов GetV8Context возвращает ноль, оно и понятно — доступно только при рендере, а мне нужно в произвольный момент
P.S. и почему такой изврат с доступом к DOM, как обратится к DOMDocument тоже из произвольного места?
Здравствуйте, Serginio1, Вы писали:
S> Можешь зарегистрировать универсальную функцию которая будет принимать название метода, параметры, а внутри вызывать eval и возвращать результат
к сожалению — получилось, остался только вопрос с тем, где лучше хранить полученные funct и ctx, чтобы можно было использовать в нужный момент. Можно ли в реализации своего CefApp как поля класса?:
Здравствуйте, RonWilson, Вы писали:
RW>но, насколько я понял, ExecuteJavaScript тоже асинхронный, как же тогда получить результат сразу после ExecuteJavaScript? в CefFrame вызов GetV8Context возвращает ноль, оно и понятно — доступно только при рендере, а мне нужно в произвольный момент
Да, мысль насчет асинхронности у меня как раз мелькнула накануне. Можно отдавать результат js ф-ии, вызывая из нее нативный коллбэк. Это тоже похоже на извращение для большинства ситуаций. Лучше, конечно, посмотреть ExecuteFunctionWithContext, как посоветовали c-smile и Serginio1.
У меня когда-то был небольшой стремительный проект с использованием CEF. Помню, упростило ситуацию переключение в режим single_process и отключение песочницы. Но детали, увы, не помню, там был перманентный цейтнот и безумие.