Установка компонента браузера Chromium(cef3 и cef4) в Delphi 6 и работа с Chromium.

Для начала необходимо скачать файлы компонента cef3(я их скачивал с github у hgourvest, так же можно встретить сылки на скачивание с code от google с которого так же переадресуют на github, когда я скачивал файлы напротив папки bin было указана версия CEF 3.2454.1344), после распаковки архива с компонентом Вы увидите извлечённую папку dcef3, её необходимо переместить в папку Lib в Delphi, в моём случаи это был адрес C:\delphi\Borland\Delphi6\Lib\.

Запустим Delphi и в меню выберем File - Open как показано на следующем скринсшоте.

Установка компонента Chromuum dcef3 в Delphi выбираем файл выбрав File - Open

Теперь где откроем папку dcef3(которую скопировали в папку Lib в Delphi) и в ней откроем папку packages после чего выберем выберем файл DCEF_D7.dpk как показано на следующем скринсшоте и нажмём кнопку "открыть".

Установка компонента Chromuum dcef3 в Delphi - непосредственно выбор файла DCEF_D7.dpk в папке packages

Откроется интерфейс установки компонента, в нём нажимаем "Compile" а затем "Install", интерфейс представлен на следующем скринсшоте.

Установка компонента Chromuum dcef3 в Delphi - интерфейс компиляции компонента

После инсталяции на меню компонентов Delphi должен появиться Chromium как показано на следующем скринсшоте.

Расположение Chromium на меню компонентов Delphi

Теперь необходимо добавить пути к библиотекам chromuim в Delphi для этого в меню выбираем Tools - Environment Options как показано на скринсшоте ниже.

Добавление адресов библиотек chromium в Delphi - выбор в меню Tools - Environment Options

В открывшемся окне выберите вкладку Library в ней в поле Library Path после последнего уже имеющегося в ней адреса после точки с запятой нужно добавить пути до папок src и packages находящихся в dcef3, то есть добавить $(DELPHI)\Lib\dcef3\src;$(DELPHI)\Lib\dcef3\packages как показано на скринсшоте ниже после чего нажмите кнопку "Ок" для сохранения.

Добавление адресов библиотек chromium в Delphi - добавление путей к папкам src и packages в Library Path

То же действие по добавлению путей можно выполнить нажав кнопку "..." с правой стороны в Library Path и добавляя адреса по одному в специальном визуальном интерфейсе используя поле Greyed items denote invalid path, посл ввода адреса в это поле необходимо нажать кнокпу Add а посе ввода всех адресов кнопку Ок, после чего нажать Ок на предыдущем окне. Добавление адресов в Library Path через специальный интерфейс показано на следующем скринсшоте.

Добавление адресов библиотек chromium в Delphi - добавление путей к папкам src и packages через специальный визуальный интерфейс

Файлы chromium cef3 которые необходимо расположить в папке вместе с exe бинарником проекта

Загрузка в Chromuim по URL страницы или из string переменной

Для загрузки информации в компоненте Chromium по URL Вы можете использовать метод Load экземпляра Chromium как показано в листинге ниже.

Если Вам необходимо загрузить HTML код предположим из string переменной ВЫ можете сделать это используя код приведённый в следующем листинге. Обратите внимание, Вам тем не менее потребуется указать URL адрес страницы с которого с которого она была якобы загружена. Если в загруженном HTML Вы используете относительные пути к картинкам, то они будут загружаться с домена указанному Вами в втором параметре или относительно указанной папки, если Вы указали что якобы загружен HTML из файла на ПК.

Установка заголовка User-Agent

Установить User-Agent можно из командной строки при запуске скомпилированной exe программы например вызовом: Project1.exe --user-agent=MyNewUserAgent или так Project1.exe --user-agent="My New User Agent"

Кроме того изменить User-Agent можно в коде файла Project1.dpr, при таком подходе User-Agent переданный через параметр при запуске программы(как в примере выше) работать не будет и всегда будет User-Agent установленный в файле Project1.dpr. Можно ли менять User-Agent динамически в процессе работы программы я не знаю, если Вы знаете такой способ Вы можете написать его в комментариях. В следующем листинге показано как менять User-Agent из программного кода в файле Project1.dpr, обратите внимание, для его работы такого кода в том же файле в модуле uses необходимо добавить ceflib.

Изменение заголовков accept, Accept-Language,Accept-Encoding в chromium cef3

Процедура отключения контекстного меню chromium cef3 вызываемого нажатием правой кнопки

Выключение звука в Chromium

Для того чтобы выключить звук в Chromium(например чтобы его не было при просмотре YouTube и прослушивании mp3 вне зависимости от расположения ползунка громкости рядом с media элементом в браузере или в операционной системе) Вы можете использовать код из листинга ниже который необходимо расположить в файле проекта, в моём случаи это был Project1.dpr. Для работы такого кода обязательно подключите в файле проекта ceflib в uses(в приведённом мной ниже коде строчка с подключением ceflib присутствует) Обратите внимание данный код выключает звук в Chromium при старте программы, о он будет выключен до конца работы программы. На текущий момент мне не известно как включать и выключать звук в Chromium в процессе работы программы, если Вам изветен такой способ, Вы можете написать о этом в комментариях.

Таким образом для отключения звука в chromium добавляем ceflib в uses, затем создаём процедуру(в примере имеет она называется CustomCommandLine, при этом Вы можете использовать другое название этой процедуры) которую далее будем использовать в качестве обратного вызова, внутри процедуры добавляем строчу commandLine.AppendSwitch('--mute-audio'); которая используя командную строку chromium выключаем звук. Описанную процедуру для того чтобы произошёл её вызов необходимо присвоить CefOnBeforeCommandLineProcessing перед вызовом Application.Initialize;

Получение HTML загруженного в Chromium

Для работы описанного ниже метода обязательно нужно добавить ceflib в uses.

Для того чтобы получить HTML код загруженный в компонент Chromuim например по клику на кнопку потребуется создать ещё одну процедуру которая будет выполняться в качестве обратного вызова. В самой процедуре клика по кнопке объявим объект CefStringVisitor класса ICefStringVisitor внутри процедуры инициализируем переменную выозом метода create класса TCefFastStringVisitor, внутрь метода Create передадим созданную процедуру для обратного вызова, в рассмотренном ниже примере она носит название StringVisitor. Далее следующей строкой выполняется метод GetSource у MainFrame в компоненте Chromium, медтоду GetSource передаётся объект CefStringVisitor. Разумеется процедуру которую мы вызываем в качестве колбека необходимо описать например в var.

Работа с Cookie

Если просто разместить компонент Chromium на форме и не проводить настроек по работе с Cookie, куки будут храниться до момента закрытия программы, то есть запускаться такая программа будет с пустыми Cookie(при этом я ещё не изучил возможность, может быть ест возможность указывать файл с Cookie при старте программы из командной строки в виде параметров).

Файл с Cookie можно подключить к компоненту Chromium вызовом кода из следующего листинга. В нём функция ExtractFilePath(Application.ExeName) возвращает дирректорию из которой запущена программа(предположим C:\dProjects\myChromium\), в примере из листинга к возвращаемому результату функции добавляется строка 'dirForCookie1\' и затем результат записывается с переменную CookiesPath типа string. После того как данная переменная будет передана методу CookieManager.SetStoragePath в папке с программой появится папка dirForCookie1, а в ней файлы: Cookies и Cookies-journal(оба файла без расширения) в которых и будет храниться информация о Cookie.

Комментарии

Если у Вас возникли вопросы, Вы можете задать их в форме ниже. В частности если Ваш вопрос по Bitrix и что то не получается - можно спросить. Ваш e-mail не публикуется, при этом я отвечу на него если будет что то по теме. Писать необходимо для людей - избегайте сленга, пишите орфографически правильно.

Имя:
E-mail:
Текст комментария:

Вы так же можете прочитать следующие статьи: