fpCEF3
Модератор: Модераторы
Спасибо. Я с этой страницы и начинал. Но не обратил внимания какая там версия указана,
Скачал cef_binary_3.3029.1619.geeeb5d7_windows32_client
работает.
Даже получилось зайти на web.whatsapp.com и подключиться.
Что странно так как мой клиент для Linux тоже работающий через Chromium одно время отказывался , пришлось ему юзерагента сменить на Chrome, только тогда заработал.
А тут работает без проблем, через Chromium да еще старой версии.
А вот Skype отказывается , требует Chrome
отсюда вопрос.
1. Как можно сменить юзер-агента у такого браузера?
и второй , об удобстве
2. Как можно поменять расположение файлов браузера?, в папке проекта всё это сваливать зело не удобно.
Скачал cef_binary_3.3029.1619.geeeb5d7_windows32_client
работает.
Даже получилось зайти на web.whatsapp.com и подключиться.
Что странно так как мой клиент для Linux тоже работающий через Chromium одно время отказывался , пришлось ему юзерагента сменить на Chrome, только тогда заработал.
А тут работает без проблем, через Chromium да еще старой версии.
А вот Skype отказывается , требует Chrome
отсюда вопрос.
1. Как можно сменить юзер-агента у такого браузера?
и второй , об удобстве
2. Как можно поменять расположение файлов браузера?, в папке проекта всё это сваливать зело не удобно.
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
jsa писал(а):1. Как можно сменить юзер-агента у такого браузера?
вот пример из делфи (из реальной программы):
Код: Выделить всё
program test;
uses
Forms,
ceflib,
ceffilescheme,
MainForm in 'MainForm.pas' {Form1},
sendmail in 'sendmail.pas' {SendMailForm};
{$R *.res}
procedure RegisterSchemes(const registrar: ICefSchemeRegistrar);
begin
registrar.AddCustomScheme('local', True, True, False);
end;
begin
CefCache := 'cache';
CefUserAgent := 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36';
// CefUserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36';
CefOnRegisterCustomSchemes := RegisterSchemes;
CefSingleProcess := False;
if not CefLoadLibDefault then // If we don't use this 2 lines (2 LINES!!!) then will be AV on close
Exit;
CefRegisterSchemeHandlerFactory('local', '', False, TFileScheme);
Application.Initialize;
Application.MainFormOnTaskbar := false;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TSendMailForm, SendMailForm);
Application.ShowMainForm := false;
Application.Run;
end.
jsa писал(а):2. Как можно поменять расположение файлов браузера?
В винде обязательно должны лежать рядом с исполняемым файлом, в линуксах не знаю.
1. Спасибо за наводку.
Но модули ceflib, ceffilescheme, почему-то не подключаются
погуглил про них, и наткнулся на такой еще совет
Так и не понял про какой initialization идет речь.
поэтому сделал проще.
открыл файл cef3lib.pas который лежит в папке компоненты, и почему то на уровень выше файла cef3.lpk
нашел там строку
CefUserAgent: ustring = ''
и просто вписал туда юзер агента который взял из текущего Хрома (команда chrome://version)
И переустановил компоненту.
Понимаю, что криво, но пока не понял как правильно сделать.
Таким же образом прописал язык браузера по умолчанию в строке
CefAcceptLanguageList: ustring = '; - прописал ru
2. Думаю есть возможность и путь к файлам браузера указать так как в cef3lib.pas есть строки
CefBrowserSubprocessPath: ustring = '';
CefFrameworkDirPath: ustring = '';
CefCachePath: ustring = '';
CefUserDataPath: ustring = '';
CefLocale: ustring = '';
CefLogFile: ustring = '';
CefResourcesDirPath: ustring = '';
CefLocalesDirPath: ustring = '';
Надо только разобраться в какую строку нужно прописать путь './chromium'
Но модули ceflib, ceffilescheme, почему-то не подключаются
погуглил про них, и наткнулся на такой еще совет
Код: Выделить всё
в идеале в initialization(или просто перед созданием экземпляра если создаётся динамически) модуля с формой где ваш chromium присвоить переменной CefUserAgent необходимый юзерагент, например:
initialization
CefUserAgent:='Windows / IE 11: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko';
end.
Так и не понял про какой initialization идет речь.
поэтому сделал проще.
открыл файл cef3lib.pas который лежит в папке компоненты, и почему то на уровень выше файла cef3.lpk
нашел там строку
CefUserAgent: ustring = ''
и просто вписал туда юзер агента который взял из текущего Хрома (команда chrome://version)
И переустановил компоненту.
Понимаю, что криво, но пока не понял как правильно сделать.
Таким же образом прописал язык браузера по умолчанию в строке
CefAcceptLanguageList: ustring = '; - прописал ru
2. Думаю есть возможность и путь к файлам браузера указать так как в cef3lib.pas есть строки
CefBrowserSubprocessPath: ustring = '';
CefFrameworkDirPath: ustring = '';
CefCachePath: ustring = '';
CefUserDataPath: ustring = '';
CefLocale: ustring = '';
CefLogFile: ustring = '';
CefResourcesDirPath: ustring = '';
CefLocalesDirPath: ustring = '';
Надо только разобраться в какую строку нужно прописать путь './chromium'
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
jsa писал(а):Так и не понял про какой initialization идет речь
Секция initialization модуля, разумеется. Смысл - присвоение должно быть ДО создания экземпляра компонента.
Чудесато, При программном создании экземпляра компоненты, моя программа запускается повторно.
Моя программа должна работать как при наличии файлов браузера Chromium в папке так и без него.
Определять наличие или включать/выключать опцию через ini файл не является вопросом.
Но, наблюдается такой эффект.
1. Компонент TChromium на форме + файлы в папке - нет проблем.
2. Компонент TChromium на форме + файлов НЕТ в папке - сообщение об ошибке при инициализации формы
3. Компонент TChromium создается программно + файлы в папке - запускается копия моей программы и в ней создается браузер, в оригинальном нет. Причем работает странно, на панели то 1 программа то 2, а в памяти обычно 3 процесса.
4. Компонент TChromium на форме + файлов НЕТ в папке + Cromium.Visible=false - ошибки нет. Но при включение Visible=true ожидаемая ошибка как в п.1.
5. Компонент TChromium на форме + файлов в папке + Cromium.Visible=false. При включении Visible=true создается копия программы как в п.3.
6. Остановился на таком варианте.
Компонент TChromium на форме + файлов в папке + Cromium.Visible=true
В событии onCreate формы на которой расположена компонента я выключаю ее Visible=false если файлы отсутствуют, тогда все работает без проблем.
Т.е. нет ошибки об отсутствии файлов, и не создаются клоны основной программы если файлы есть и Visible оставить true.
Понимаю что это связано как с режимом открытия ссылок в новом окне браузера. Но сколько ни гуглил, не нашел толковых объяснений как с этим работать.
Кто-нибудь создавал динамически компоненту на форме?
Мне понадобится несколько табов делать и не разобравшись в этим не получится продвинуться.
P.S. я пробовал метод в обработкой события onBeforePopup и в нем Result:=true или false
не помогает, вообще оно скорее всего о всплывающих сообщениях.
Определять наличие или включать/выключать опцию через ini файл не является вопросом.
Но, наблюдается такой эффект.
1. Компонент TChromium на форме + файлы в папке - нет проблем.
2. Компонент TChromium на форме + файлов НЕТ в папке - сообщение об ошибке при инициализации формы
3. Компонент TChromium создается программно + файлы в папке - запускается копия моей программы и в ней создается браузер, в оригинальном нет. Причем работает странно, на панели то 1 программа то 2, а в памяти обычно 3 процесса.
4. Компонент TChromium на форме + файлов НЕТ в папке + Cromium.Visible=false - ошибки нет. Но при включение Visible=true ожидаемая ошибка как в п.1.
5. Компонент TChromium на форме + файлов в папке + Cromium.Visible=false. При включении Visible=true создается копия программы как в п.3.
6. Остановился на таком варианте.
Компонент TChromium на форме + файлов в папке + Cromium.Visible=true
В событии onCreate формы на которой расположена компонента я выключаю ее Visible=false если файлы отсутствуют, тогда все работает без проблем.
Т.е. нет ошибки об отсутствии файлов, и не создаются клоны основной программы если файлы есть и Visible оставить true.
Понимаю что это связано как с режимом открытия ссылок в новом окне браузера. Но сколько ни гуглил, не нашел толковых объяснений как с этим работать.
Кто-нибудь создавал динамически компоненту на форме?
Мне понадобится несколько табов делать и не разобравшись в этим не получится продвинуться.
P.S. я пробовал метод в обработкой события onBeforePopup и в нем Result:=true или false
не помогает, вообще оно скорее всего о всплывающих сообщениях.
Народ! Есть у кого рецепт как побороть повторное открытие программы, при динамическом создании компоненты TChromium , или при установке Chromium1.Visible:=true; ???
Подскажите пожалуйста!
P.S. способ c обработкой события onBeforePopup и в нем Result:=true не работает.
Подскажите пожалуйста!
P.S. способ c обработкой события onBeforePopup и в нем Result:=true не работает.
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
Откомпилировал стандартный пример guitest из fpCEF3-master. Добавил кнопку, которая делает Chromium1.Visible:=true и наоборот. Никаких повторных открываний программы не наблюдаю.
Лазарь 2.0.4, Windows 10 х64.
Лазарь 2.0.4, Windows 10 х64.
пример guitest из fpCEF3-master
это что за пакет? у меня fpCEF3-3.3029
там нет такого
Добавлено спустя 17 минут 51 секунду:
попробовал на своем примере, тоже видимо-невидимо работает без проблем.
Поставь в свойствах Chromium1.Visible:=false в инспекторе объектов. И тогда увидишь эффект.
это что за пакет? у меня fpCEF3-3.3029
там нет такого
Добавлено спустя 17 минут 51 секунду:
Снег Север писал(а):Откомпилировал стандартный пример guitest из fpCEF3-master. Добавил кнопку, которая делает Chromium1.Visible:=true и наоборот. Никаких повторных открываний программы не наблюдаю.
Лазарь 2.0.4, Windows 10 х64.
попробовал на своем примере, тоже видимо-невидимо работает без проблем.
Поставь в свойствах Chromium1.Visible:=false в инспекторе объектов. И тогда увидишь эффект.
- Снег Север
- долгожитель
- Сообщения: 3067
- Зарегистрирован: 27.11.2007 15:14:47
- Контактная информация:
jsa, да, действительно, получил этот баг в fpCEF3. На делфи в dcef3 его нет, так что что-то криво в этом коде.
Попробуйте еще CEF4Delphi - там есть и поддержка Лазаря: - https://github.com/salvadordf/CEF4Delphi
У меня на примере SimpleBrowser баг в таком варианте не появился.
Попробуйте еще CEF4Delphi - там есть и поддержка Лазаря: - https://github.com/salvadordf/CEF4Delphi
У меня на примере SimpleBrowser баг в таком варианте не появился.
спасибо попробую
Добрался. Скачал CEF4Delphi-master версии 81.2.17 к которому есть сборка 32х битного CEF cef_binary_81.2.17+gb382c62+chromium-81.0.4044.113_windows32.tar.bz2
Попробовал demo проекты, вроде работает.
Включение и выключение в зависимости от параметра опробую и напишу.
Попробовал demo проекты, вроде работает.
Включение и выключение в зависимости от параметра опробую и напишу.
