Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Защита от внешнего контента в TWebBrowser: Как ограничить загрузку и разрешить её по желанию

Delphi , Интернет и Сети , Браузер

Разработчики, использующие компоненты TWebBrowser, TEmbeddedWB или TCppWebBrowser в своих проектах на Delphi, часто сталкиваются с необходимостью ограничить загрузку внешнего контента, такого как изображения, скрипты, внешние CSS, фреймы, iframe, объекты и другие встраиваемые элементы. Это может быть связано с различными задачами, например, с необходимостью работы в режиме "оффлайн" или с желанием контролировать загрузку ресурсов.

Проблема

Пользователь пытается заблокировать загрузку любого внешнего контента, загружаемого через TWebBrowser. Это включает в себя ограничение загрузки изображений, JavaScript, внешних CSS, а также элементов, таких как <embed>, <object>, <applet>, <frame> и <iframe>, а также выполнение JavaScript, которое может загружать внешний контент.

Проблема состоит из двух частей:

  1. Блокировка всех внешних элементов (за исключением базового HTML без изображений) и детектирование наличия таких элементов.
  2. Предоставление возможности загрузки всех элементов после подтверждения пользователем, если внешний контент обнаружен.

Первый пункт вызывает трудности, так как даже с использованием опций DownloadOptions и установкой ForceOffline в TEmbeddedWB, некоторые элементы, такие как <object> или <iframe>, все еще загружаются. Это подтверждается тем, что событие OnBeforeNavigate2 срабатывает для URL, содержащихся в этих тегах, и запись о загрузке появляется в локальном сервере. Установка свойств OfflineMode и ForceOfflineMode в TEmbeddedWB не помогает в решении этой проблемы.

Решение

Для решения проблемы можно использовать следующий подход:

  • Используйте компонент THTMLDocument для работы с HTML-контентом.
  • Детектируйте внешние ссылки в изображениях и объектах.
  • Ограничьте загрузку внешних ресурсов, используя механизмы браузера.

Пример кода на Object Pascal (Delphi) для детектирования внешних ссылок в изображениях и объектах:

#include "html.h"
THTMLDocument doc;

void __fastcall TForm1::CppWebBrowser1DocumentComplete(TObject *Sender, LPDISPATCH pDisp,
              Variant *URL)
{
    doc.documentFromVariant(CppWebBrowser1->Document);

    bool HasExternalContent = false;
    for (int i=0; i<doc.images.length; i++) {
        if(doc.images[i].src.SubString(1, 4) == "http")
        {
            HasExternalContent = true;
            break;
        }
    }
    for (int i=0; i<doc.applets.length; i++) {
        THTMLObjectElement obj = doc.applets[i];
        if(obj.data.SubString(1, 4) == "http")
            HasExternalContent = true;
        if(obj.codeBase.SubString(1, 4) == "http")
            HasExternalContent = true;
        if(obj.classid.SubString(1, 4) == "http")
            HasExternalContent = true;
    }

    // Если обнаружен внешний контент, отобразите панель загрузки
    // и после клика разрешите полную загрузку
    if (HasExternalContent) {
        ShowDownloadBar();
    }
}

Для полноценной работы с HTML-документом и его элементами, рекомендуется использовать обертку THTMLDocument, которую можно скачать здесь.

Важные замечания

  • Убедитесь, что ваш HTML-документ не слишком сложен, чтобы избежать ненужных сложностей в реализации.
  • Если вы используете Internet Explorer как компонент браузера, убедитесь, что у вас есть необходимые знания и инструменты для работы с его зонами безопасности.
  • Рассмотрите возможность использования альтернативных компонентов, таких как TChromium, если IE не предоставляет достаточного контроля.

Используя предложенные методы и примеры кода, вы сможете контролировать загрузку внешнего контента в TWebBrowser, ограничивая её и разрешая по желанию.

Создано по материалам из источника по ссылке.

Разработчики, использующие компоненты TWebBrowser в Delphi, сталкиваются с необходимостью контролировать загрузку внешнего контента и ограничивать её в соответствии с нуждами своего приложения.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Браузер ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-20 22:53:56/0.0021610260009766/0