Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4]      все
 Re: CEF4Delphi в потоке с внешней формой  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13227
JaDi
CEF полностью поддерживает querySelectorAll.


CEF4Delphi поддерживает внедрение JS в страничку
21954002
1 сен 19, 09:52    [21961401]     Ответить | Цитировать Сообщить модератору
 Re: CEF4Delphi в потоке с внешней формой  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13227
JaDi
Это же жесть -- вручную перебирать всю структуру DOM.


Хорошо. А как получить в свою программу из документа определённый контент, содержимое той или иной ноды? Но без установки доп. расширений в CEF.
2 сен 19, 10:24    [21961665]     Ответить | Цитировать Сообщить модератору
 Re: CEF4Delphi в потоке с внешней формой  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 4028
X11
JaDi
Это же жесть -- вручную перебирать всю структуру DOM.


Хорошо. А как получить в свою программу из документа определённый контент, содержимое той или иной ноды? Но без установки доп. расширений в CEF.

Это риторический вопрос в стиле "как из процедуры вернуть результат, не преобразовывая ее в функцию". Хром -- асинхронный. Чтобы что-то из него получить, необходимо дождаться результата. Это можно сделать разными способами -- от eval и extention до вечного while в ожидании появления новых данных в скрытом dom-элементе. См. примеры в "\demos\Delphi_VCL\JavaScript", как там значения возвращаются.
2 сен 19, 11:30    [21961727]     Ответить | Цитировать Сообщить модератору
 Re: CEF4Delphi в потоке с внешней формой  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13227
Если вы загружаете скрипт из файла в кодировке UTF-8, то не забудьте перед его внедрением в CEF конвертировать в string:
s := UTF8ToString(RawByteString(sJsScript));
4 сен 19, 12:30    [21963276]     Ответить | Цитировать Сообщить модератору
 Re: CEF4Delphi в потоке с внешней формой  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13227
Я правильно понимаю, что
GlobalCEFApp := TCefApplication.Create;

Создаётся глобально для всей системы, а не только для моей программы и тем более не только для доп. потока(ов) приложения?

Я про то, что когда TChromium (PID_BROWSER) и процесс рендерига (PID_RENDERER) обмениваются между собой сообщениями
frame.SendProcessMessage();

в сообщении нужно конкретизировать как-то - что и кому предназначено?

Если в приложении несколько потоков, то нужно в каждом потоке и свой экземпляр TChromium создавать? Или TChromium должен быть общим?
5 сен 19, 13:06    [21964474]     Ответить | Цитировать Сообщить модератору
 Re: CEF4Delphi в потоке с внешней формой  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13227
ведь процесс создания браузера запускается из DPR файла, т.е. непосредственно ещё до старта моего приложения

procedure CreateGlobalCEFApp;
begin
//вызов CreateGlobalCEFApp() происходит в dpr

  GlobalCEFApp                            := TCefApplication.Create;
  GlobalCEFApp.OnProcessMessageReceived   := GlobalCEFApp_OnProcessMessageReceived;
  GlobalCEFApp.WindowlessRenderingEnabled := True;
  GlobalCEFApp.EnableHighDPISupport       := True;
  GlobalCEFApp.DisableFeatures            := 'NetworkService,VizDisplayCompositor';
  GlobalCEFApp.FrameworkDirPath           := '...';
  GlobalCEFApp.LocalesDirPath             := '...';
  GlobalCEFApp.ResourcesDirPath           := '...';
  GlobalCEFApp.LogFile                    := '...';
end;


Получается, что процедура GlobalCEFApp_OnProcessMessageReceived ловит сообщения от всех экземпляров TChromium из разных потоков приложения?

Каждый отдельный поток парсит свой отдельный сайт.
Нормально ли будет работать браузер?
Первый поток Chromium1.LoadURL(...);
Загрузка этого сайта даже не завершилась, а тут
Второй поток Chromium2.LoadURL(другой сайт);

нормально ли завершиться загрузка первого сайта?
5 сен 19, 13:14    [21964484]     Ответить | Цитировать Сообщить модератору
 Re: CEF4Delphi в потоке с внешней формой  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 4028
Конечно нормально. Там же асинхронное всё, да еще и в своих собственных процессах крутится.
5 сен 19, 13:31    [21964516]     Ответить | Цитировать Сообщить модератору
 Re: CEF4Delphi в потоке с внешней формой  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13227
X11
Если в приложении несколько потоков, то нужно в каждом потоке и свой экземпляр TChromium создавать? Или TChromium должен быть общим?


как правильно? или нет разницы?
5 сен 19, 13:32    [21964519]     Ответить | Цитировать Сообщить модератору
 Re: CEF4Delphi в потоке с внешней формой  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13227
Просто я собираюсь использовать Chromium в headless режиме и там не будет TCEFWindowParent.

Вот если в приложении несколько вкладок или пользователь сам создает вкладки, как это в классическом браузере, то достаточно одного экземпляра Chromium, как я понимаю?
Просто будет вот так:
Chromium1.CreateBrowser(CEFWindowParent1, '');
Chromium1.CreateBrowser(CEFWindowParent2, '');
Chromium1.CreateBrowser(CEFWindowParent3, '');


Но у меня-то не будет разных CEFWindowParent.
5 сен 19, 13:39    [21964536]     Ответить | Цитировать Сообщить модератору
 Re: CEF4Delphi в потоке с внешней формой  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 4028
CEFWindowParent1 -- это визуальный компонент, где будет идти отрисовка конкретного экземпляра браузера. В соседней же теме было, что для работы в безрендеринговом режиме можно туда nil передавать.

Для потоков должен быть свой собственный браузер TChromium.Create
5 сен 19, 14:00    [21964571]     Ответить | Цитировать Сообщить модератору
 Re: CEF4Delphi в потоке с внешней формой  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13227
JaDi
CEFWindowParent1 -- это визуальный компонент, где будет идти отрисовка конкретного экземпляра браузера. В соседней же теме было, что для работы в безрендеринговом режиме можно туда nil передавать.


это я всё знаю уже давно
5 сен 19, 14:09    [21964579]     Ответить | Цитировать Сообщить модератору
 Re: CEF4Delphi в потоке с внешней формой  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13227
JaDi
Для потоков должен быть свой собственный браузер TChromium.Create


Вы не понимаете мои вопросы?
5 сен 19, 14:09    [21964582]     Ответить | Цитировать Сообщить модератору
 Re: CEF4Delphi в потоке с внешней формой  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 4028
X11
Вы не понимаете мои вопросы?


Ответ был на это:
автор
Если в приложении несколько потоков, то нужно в каждом потоке и свой экземпляр TChromium создавать? Или TChromium должен быть общим?
5 сен 19, 14:16    [21964592]     Ответить | Цитировать Сообщить модератору
 Re: CEF4Delphi в потоке с внешней формой  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13227
Возникла проблема в реальной программе.
Программа защищается с помощью ASProtect SKE.
Т.е. где-то в какой-то форме, которая создается по кнопке есть использование сторонней dll.
Так вот, при инициализации CEF`а происходит исключение (exception).
Хотя строка инициализации CEF`а
CreateGlobalCEFApp;

идёт самой первой после begin в dpr.

Как обойти проблему?

На всякий случай прикреплю код получения HardwareID
uses aspr_api;



procedure TfmAbout.FormCreate(Sender: TObject);
begin
  edHid.Text := String(PAnsiChar(GetHardwareID));
end;


в aspr_api.pas есть
functon  GetHardwareID : PChar; stdcall;
...
...
implementation
...
...
function  GetHardwareID : PChar; external aspr_ide name 'GetHardwareID';


т.е. нужно как-то заставить dll`ку грузиться позже? или....
11 сен 19, 10:46    [21968343]     Ответить | Цитировать Сообщить модератору
 Re: CEF4Delphi в потоке с внешней формой  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 13227
В принципе, у меня всё взлетело и парсинг работает в отдельном потоке без окон, т.е. в режиме headless.

Осталось решить проблему с загрузкой сторонней dll.
11 сен 19, 16:17    [21968652]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4]      все
Все форумы / Delphi Ответить