Разработчики, использующие компоненты TWebBrowser, TEmbeddedWB или TCppWebBrowser в своих проектах на Delphi, часто сталкиваются с необходимостью ограничить загрузку внешнего контента, такого как изображения, скрипты, внешние CSS, фреймы, iframe, объекты и другие встраиваемые элементы. Это может быть связано с различными задачами, например, с необходимостью работы в режиме "оффлайн" или с желанием контролировать загрузку ресурсов.
Проблема
Пользователь пытается заблокировать загрузку любого внешнего контента, загружаемого через TWebBrowser. Это включает в себя ограничение загрузки изображений, JavaScript, внешних CSS, а также элементов, таких как <embed>, <object>, <applet>, <frame> и <iframe>, а также выполнение JavaScript, которое может загружать внешний контент.
Проблема состоит из двух частей:
Блокировка всех внешних элементов (за исключением базового HTML без изображений) и детектирование наличия таких элементов.
Предоставление возможности загрузки всех элементов после подтверждения пользователем, если внешний контент обнаружен.
Первый пункт вызывает трудности, так как даже с использованием опций DownloadOptions и установкой ForceOffline в TEmbeddedWB, некоторые элементы, такие как <object> или <iframe>, все еще загружаются. Это подтверждается тем, что событие OnBeforeNavigate2 срабатывает для URL, содержащихся в этих тегах, и запись о загрузке появляется в локальном сервере. Установка свойств OfflineMode и ForceOfflineMode в TEmbeddedWB не помогает в решении этой проблемы.
Решение
Для решения проблемы можно использовать следующий подход:
Используйте компонент THTMLDocument для работы с HTML-контентом.
Детектируйте внешние ссылки в изображениях и объектах.
Ограничьте загрузку внешних ресурсов, используя механизмы браузера.
Пример кода на Object Pascal (Delphi) для детектирования внешних ссылок в изображениях и объектах:
Для полноценной работы с HTML-документом и его элементами, рекомендуется использовать обертку THTMLDocument, которую можно скачать здесь.
Важные замечания
Убедитесь, что ваш HTML-документ не слишком сложен, чтобы избежать ненужных сложностей в реализации.
Если вы используете Internet Explorer как компонент браузера, убедитесь, что у вас есть необходимые знания и инструменты для работы с его зонами безопасности.
Рассмотрите возможность использования альтернативных компонентов, таких как TChromium, если IE не предоставляет достаточного контроля.
Используя предложенные методы и примеры кода, вы сможете контролировать загрузку внешнего контента в TWebBrowser, ограничивая её и разрешая по желанию.
Разработчики, использующие компоненты TWebBrowser в Delphi, сталкиваются с необходимостью контролировать загрузку внешнего контента и ограничивать её в соответствии с нуждами своего приложения.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.