Chromium Embedded (CEF) - начален екран

Модифицирам приложение cefsimple, за да отговаря на моите нужди. Имам дълга начална нишка във фонов режим, така че отнема известно време, докато се покаже уеб страницата (5-10 секунди). Междувременно искам да покажа някакъв начален екран или поне малко HTML, преди да бъде изобразена главната страница. Кой е най-добрият (или някакъв) начин да го направите?

Благодаря предварително!


person Vyacheslav    schedule 24.03.2015    source източник


Отговори (1)


Имаме html файл, компилиран в нашето приложение, и предаваме този URL на CefBrowserHost::CreateBrowserSync().

Вижте resource_util_win.cpp в примера на cefclient, по-специално GetResourceId() за свързване на URL адреса с компилирания ID на ресурса.

Междувременно тялото на нашия splashscreen.html има

<body class="splash" onload=" pageLoad() ">

и pageLoad() изглежда така

        function pageLoad() {
            window.location = "www.yourrealurl.com";
            }          
        }

Нашият начален екран има фон, зададен от лист със стилове и анимиран gif, и изчезва веднага щом се появи исканият URL адрес.

Ако вече сте получили отговора на сървъра, но изобразяването отнема много време, това няма да помогне. Използваме Angular в заредената страница, за да я скрием, докато не приключи със зареждането на своите зависимости.

<div ng-cloak class="ng-cloak" ng-if="IsInitDone()">
person PhysicalEd    schedule 25.03.2015
comment
Благодаря за отговора. Това вече ми даде много добра идея, но ако нямате нищо против, бихте ли могли да дадете малко повече подробности, може би с примери за код (съжалявам, че съм напълно нов в CEF и идвам от света на Java). Например, как четете и предавате splashscreen.html. Какво се случва, ако сървър (всъщност вградена JVM) все още не отговори на www.yourrealurl.com, но ще отговори след няколко секунди? Благодаря! - person Vyacheslav; 26.03.2015
comment
на коя платформа си? - person PhysicalEd; 26.03.2015
comment
В Windows имаме SplashScreen.html, animated.gif и site.css style sheet, компилирани в приложението като стандартни ресурси на Windows. - person PhysicalEd; 26.03.2015
comment
argh, изчакване при редактиране. Бях неправилен за GetResourceHandle() в моя отговор (редактирах го), това, което искате да направите, е същото нещо, което пробата cefclient прави в resource_util_win.cpp, вижте техните функции GetResourceId() и LoadBinaryResource(). - person PhysicalEd; 26.03.2015
comment
ако вашата вградена JVM не отговори за няколко секунди, трябва да сте добре, ако отговорът е завършен - началният екран трябва да остане видим, докато страницата, която зареждате от началния екран, не се зареди. Ако предоставите частични резултати, може да поискате да задържите отговора, докато не бъдат налични всички данни. - person PhysicalEd; 26.03.2015
comment
Благодаря много. Успях да вградя html страница и анимиран gif и те се зареждат добре. Все още обаче имам забавяне преди зареждането на началната страница. Причината за това вероятно е, че CEF чака JVM да бъде инициализирана. Това, което правя е: създаване на JVM от конструктора на ClientHandler (всъщност методът за създаване изпълнява CefPostTask за TID_PROCESS_LAUNCHER), след което в същата нишка стартирам основен метод на моята уеб услуга. Какъв би бил правилният начин за стартиране на JVM, който а) отнема известно време за стартиране; б) отнема известно време след началото, за да започне да се отговаря на заявки? - person Vyacheslav; 30.03.2015
comment
Какво ще кажете, ако имате onLoad() в извикването на тялото на началния екран в някакъв Javascript във вашия клиент, за да стартирате действително JVM, вместо да го стартирате изрично в клиента? Така че добавете нещо като window.startJVM(); към тази функция pageLoad() в отговора. Разбира се, ще трябва да настроите JS методите в клиента на CEF, но вероятно вече правите някои от тях, ако не, не е трудно, добре е документирано в документите на CEF. - person PhysicalEd; 31.03.2015