Как исправить ошибку «Ваш браузер устарел» при отображении сайтов в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке механизмов парсинга или интеграции с веб-сервисами через «Поле HTML документа» программисты часто сталкиваются с неприятным сообщением: «Ваш браузер устарел, пожалуйста, обновите ваш браузер». Эта проблема возникает из-за того, что по умолчанию встроенные механизмы платформы 1С используют старые движки рендеринга (Internet Explorer), которые не поддерживают современные стандарты веб-верстки и протоколы безопасности. В этой статье мы подробно разберем, как заставить 1С корректно отображать современные сайты, используя различные подходы: от настройки системного реестра до перехода на актуальные версии платформы.

Причина возникновения ошибки и эволюция движков 1С

Для начала проанализируем ситуацию: почему современные сайты, такие как Infostart или Avito, отказываются работать внутри 1С? Проблема кроется в компоненте ПолеHTMLДокумента. В старых версиях платформы (до 8.3.14) этот элемент управления всегда использовал движок Internet Explorer, установленный в операционной системе, причем в режиме совместимости с крайне старой версией IE7. Даже если у вас в Windows установлен Internet Explorer 11, 1С «прикидывается» старым браузером, что вызывает блокировку со стороны современных веб-ресурсов.

Рассмотрим, как менялась ситуация в зависимости от версии платформы:

  1. Версии до 8.3.14: Использовался исключительно Internet Explorer. Проблема решается только правкой реестра или использованием внешних компонент.
  2. Версии с 8.3.14 по 8.3.19: Платформа начала использовать движок WebKit. Это значительно улучшило ситуацию, позволив открывать большинство современных сайтов.
  3. Версии 8.3.20 и выше: 1С перешла на полноценный движок Chromium (CEF). Это наиболее современное решение, которое практически полностью снимает вопросы совместимости.

Решение 1: Переход на актуальную версию платформы

Самый простой и эффективный способ — обновить платформу 1С. Как было отмечено в ходе обсуждения проблемы, переход на версию 8.3.14 и выше позволяет встроенному браузеру использовать WebKit. Если ваша конфигурация позволяет, рекомендуется обновляться сразу до 8.3.20 или выше, чтобы использовать мощь движка Chromium.

Проанализируем преимущества этого подхода: вам не нужно вносить изменения в настройки операционной системы на каждом рабочем месте пользователя. Платформа сама несет в себе необходимые библиотеки для рендеринга. Однако стоит учитывать, что при использовании WebKit/Chromium могут измениться некоторые нюансы взаимодействия с DOM-моделью через встроенный язык 1С.

Решение 2: Настройка эмуляции Internet Explorer через реестр

Если по техническим причинам вы вынуждены оставаться на платформе версии ниже 8.3.14, разберем по шагам метод принудительного повышения версии эмуляции браузера. По умолчанию система считает, что 1С — это IE7. Мы можем изменить это поведение через реестр Windows.

Для этого необходимо выполнить следующие действия:

  1. Откройте редактор реестра (regedit).
  2. Перейдите в ветку: HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION.
  3. Создайте новый параметр типа DWORD (32 бита).
  4. В качестве имени параметра укажите название исполняемого файла 1С. Например, для тонкого клиента это 1cv8c.exe, для толстого — 1cv8.exe.
  5. Установите значение 11000 (в десятичной системе исчисления) или 2AF8 (в шестнадцатеричной). Это заставит 1С использовать движок IE11.

Важный нюанс: эти изменения вносятся в ветку HKEY_CURRENT_USER, а значит, они будут действовать только для текущего пользователя. Если с программой работают несколько человек, данные записи нужно добавить для каждого. Проанализируем пример кода, который позволяет автоматизировать эту задачу прямо из 1С при старте системы:


Процедура УстановитьЭмуляциюБраузера() Экспорт
    #Если ТонкийКлиент Или ТолстыйКлиентОбычноеПриложение Тогда
        ПутьКРеестру = "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION";
        ИмяПроцесса = "1cv8c.exe"; // Для тонкого клиента
        
        Попытка
            WshShell = Новый COMОбъект("WScript.Shell");
            ТекущееЗначение = WshShell.RegRead(ПутьКРеестру + "\" + ИмяПроцесса);
            
            Если ТекущееЗначение <> 11000 Тогда
                WshShell.RegWrite(ПутьКРеестру + "\" + ИмяПроцесса, 11000, "REG_DWORD");
            КонецЕсли;
        Исключение
            // Возможно, прав не хватает или объект не создался
        КонецПопытки;
    #КонецЕсли
КонецПроцедуры

Решение 3: Обработка HTTP-редиректов (код состояния 302)

Часто при парсинге сайтов (например, при попытке получить данные о релизах с портала 1С) программисты сталкиваются с тем, что вместо содержимого страницы приходит код состояния 302 (Moved Temporarily). Это означает, что сервер пытается перенаправить вас на другой URL (например, с http на https или на страницу авторизации).

Разберем ситуацию: стандартный объект HTTPСоединение в 1С не умеет автоматически следовать по редиректам. Вам нужно обработать это вручную. Выясним причину: в заголовках ответа от сервера при коде 302 всегда присутствует заголовок Location, содержащий новый адрес.

Рассмотрим пример правильной обработки такого перехода:


Функция ПолучитьДанныеСУчетомРедиректа(URL)
    // Разделяем URL на части (хост, ресурс)
    // Предположим, у нас есть функция ПарситьURL(URL)
    
    Запрос = Новый HTTPЗапрос(Ресурс);
    Ответ = Соединение.Получить(Запрос);
    
    Если Ответ.КодСостояния = 302 Тогда
        НовыйАдрес = Ответ.Заголовки.Получить("Location");
        Если НовыйАдрес <> Неопределено Тогда
            // Повторяем запрос по новому адресу
            Возврат ПолучитьДанныеСУчетомРедиректа(НовыйАдрес);
        КонецЕсли;
    КонецЕсли;
    
    Возврат Ответ;
КонецФункции

Решение 4: Подмена User-Agent

Проанализируем еще одну причину, по которой сайты выдают ошибку устаревшего браузера. При выполнении HTTPЗапроса платформа 1С по умолчанию передает заголовок User-Agent, содержащий строку вида 1C+Enterprise/8.3. Современные системы защиты (WAF, Cloudflare) мгновенно идентифицируют такой запрос как бота и отдают заглушку «Обновите браузер».

Для решения этой проблемы необходимо имитировать работу реального браузера. Посмотрим на пример кода, где мы добавляем заголовки к запросу:


Запрос = Новый HTTPЗапрос(ПутьНаСервере);
Запрос.Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36");
Запрос.Заголовки.Вставить("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8");

Результат = Соединение.Получить(Запрос);

Использование актуального User-Agent вместе с современным движком (или эмуляцией IE11) позволяет обходить большинство проверок на «устаревший браузер».

Итоги и рекомендации

Мы рассмотрели комплексный подход к решению проблемы отображения веб-страниц в 1С. Подведем итоги:

← На главную