Информация об изменениях

Сообщение Re[3]: использования CEF в Visual Studio от 19.01.2017 15:29

Изменено 25.01.2017 12:32 Serginio1

Re[3]: использования CEF в Visual Studio
Здравствуйте, fddima, Вы писали:

F>Здравствуйте, Serginio1, Вы писали:


F>Честно говоря, учитывая что ты нашел все необходимые материалы — в чём вопрос-то?


F>Если есть желания связаться с CEF — вопросы лучше задавать на оригинальном форуме (там больше людей в теме).

F>Если есть необходимость — я могу помочь в скайпе (направить в нужную сторону или попытаться объяснить на пальцах по мере возникновения вопросов), как делаются те или иные вещи в CEF.

F>В плане JS->Native вызовов всё сводится к нескольким подходам:


F>1. XHR и в browser process реализуется resource handler. Преимущество: renderer->browser IPC достаётся бесплатно. Недостаток: только асинхронные вызовы.


F>2. V8Handler/V8Accessor. Преимущество: выставляем любой JS API. Недостаток: renderer->browser IPC бесплатно не достаётся, но посылку сообщений делаем через CefProcessMessage (только асинхронный обмен). Если нужен иной IPC — никто не помешает создать. В принципе это самый универсальный вариант.


F>3. Используем CEF's message router. Как бы всё готово, но по сути делает оно тоже что и (2), выставляя готовый шлюз в JS.


F>Так или иначе на стороне JS должна быть какая-то клиентская библиотека (генерённая?) выставляющая вменяемый API для потребления, поэтому каким именно образом оно реализовано (1-3) обычно не так уж важно.


Огромное спасибо за ответ. 2 дня боролся. Но поборол. У меня опыта на С++ мало. Вспоминаю, то что забыл и учу то, что не знал. Но сегодня подключил
И в частности Кроссплатформенное использование классов .Net из неуправляемого кода. Или аналог IDispatch на Linux

И вызвал методы. Так, что буду двигаться.
Добавлю асинхронные методы, компиляцию оберток для событий.
Мне по сути нужно со стороны JS сделать несколько методов

ManagedCallAsFunc
ManagedCallAsFunAsync
ManagedGetPropVal
ManagedSetPropVal

И подпись на события. И через них создавать любые объекты, вызывать их методы.
Думаю за 2 недели сделаю.

У CEF есть и dev tools. Но вот нужно правильно подключить файлы из CefClient. Разберусь.
Главное сдвинулся с мертвой точки. Еще раз огромное спасибо!


Вот такой вариант вполне мне подходит

class MyV8Handler2 : public CefV8Handler {
        public:
            MyV8Handler2() {}

            virtual bool Execute(const CefString& name,
                CefRefPtr<CefV8Value> object,
                const CefV8ValueList& arguments,
                CefRefPtr<CefV8Value>& retval,
                CefString& exception) OVERRIDE {
            
                    if (arguments.size() >0)

                    {
                      if (arguments[0]->IsString())

                        {
                            retval = CefV8Value::CreateString("My Value!" + arguments[0]->GetStringValue().ToString());

                            return true;

                        }

                    }


                    retval = CefV8Value::CreateString("My Value!");
                    return true;
    
            
            }

            // Provide the reference counting implementation for this class.
            IMPLEMENT_REFCOUNTING(MyV8Handler2);
        };


void SimpleApp::OnContextCreated(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame, CefRefPtr<CefV8Context> context)
    {
        // Retrieve the context's window object.
        CefRefPtr<CefV8Value> object = context->GetGlobal();

        // Create an instance of my CefV8Handler object.
        CefRefPtr<CefV8Handler> handler = new MyV8Handler2();

        // Create the "myfunc" function.
        CefRefPtr<CefV8Value> func = CefV8Value::CreateFunction("myfunc2", handler);

        // Add the "myfunc" function to the "window" object.
        object->SetValue("myfunc2", func, V8_PROPERTY_ATTRIBUTE_NONE);


    }



И JS


<script language="JavaScript">
    alert(window.myfunc2("Привет 2"));
</script>
Re[3]: использования CEF в Visual Studio
Здравствуйте, fddima, Вы писали: