Squeak.ru - шаблоны программирования

Несколько версий Internet Explorer в одном приложении

в приложении MFC, над которым я работаю, мне нужно, чтобы отображался Internet Explorer (мы используем компонент CHtmlView), в настоящее время мы можем изменить режим рендеринга, в котором работает IE, с помощью FEATURE_BROWSER_EMULATION. Однако это позволяет нам только изменить режим рендеринга всех экземпляров CHtmlView в приложении, а чтобы применить это изменение, мы должны перезапустить приложение.
Проблема в том, что мы хотели бы иметь более одной версии IE. отображаются рядом в нашем приложении. Я знаю, что можно получить несколько версий IE на одном компьютере, но я не уверен, как получить их все в одном приложении.
У нас есть некоторые идеи, как решить эту проблему, но на самом деле их нет. тривиальные решения, поэтому я хочу попросить ваших идей. Во всяком случае, вот что мы придумали:

  1. Загрузите исходный код страницы, добавьте документ тег совместимости, измените все адреса в документе на абсолютные и сохраните эту страницу на диск. Затем перезагрузите страницу с диска с помощью IE. Это решение работает только частично, потому что, хотя оно заставляет IE использовать правильный режим рендеринга, страница не может загрузить некоторые ресурсы, потому что она находится в другом месте, чем оригинал - адреса, которые мы изменили, работают хорошо, но, например, сгенерированные JavaScript - нет. И это решение, как правило, очень грязное, поэтому мы отказались от него.

  2. Используйте несколько процессов — каждая версия IE будет иметь свою собственную библиотеку исполняемых файлов/dll, мы используем функция эмуляции браузера для каждого исполняемого файла, а затем каким-то образом склеить это в одно приложение (признаюсь, я понятия не имею, как это сделать, так как я никогда не использовал несколько процессов с Windows/MFC) . Но я не знаю, сработает ли это решение...

  3. Создайте прокси для нашего приложения, которое изменит загруженный исходный код так же, как представлено в решении 1, — оно добавит тег совместимости документа, чтобы перевести IE в нужный режим, но может оставить адреса нетронутыми, так как IE увидит источник как исходящие из исходного местоположения. Это решение кажется мне самым безопасным, но как и в случае с 2. решением, я не знаю, как сделать прокси-слой для нашего приложения, и что более важно, сколько времени это займет.

Итак, у вас есть какие-либо идеи о том, как еще это можно решить? Если решение использует что-то отличное от CHtmlView, так и быть, мы всегда можем это изменить. Что касается версий IE, которые мы хотели бы иметь, было бы неплохо поддерживать IE6, но это не обязательно, самая младшая необходимая версия — IE7.

Заранее спасибо за ваше время, любые идеи будут оценены.


  • Единственный известный мне пример — IETester. Это доказывает, что это можно сделать, но не помогает вам узнать, как на самом деле это сделать. Хотя это может дать вам некоторые зацепки. 11.01.2011
  • Да, я знаю, что тестер IE способен на это. Насколько я знаю, он использует несколько процессов (хотя и не уверен). Проблема в том, что мы пробовали это некоторое время назад, и это было очень глючно, все время зависало. Однако основная проблема с IETester заключалась в том, что он не отображал страницы на 100% в соответствии с выбранными браузерами, я не уверен, что именно было не так, так как мы пробовали это несколько месяцев назад, но я помню, что были некоторые проблемы. Тем не менее, это был отличный инструмент. 11.01.2011

Ответы:


1

В конце концов я решил это, используя

наш собственный прокси-сервер (реализованный с помощью boost asio) и изменение заголовков HTTP-запроса/ответа, чтобы перевести IE в правильный режим совместимости.

несколько исполняемых файлов с уникальными именами, с установленным режимом совместимости в реестре. Каждая версия браузера выполнялась в отдельном процессе.

Как оказалось, прокси-сервер не всегда работал должным образом. Решение с несколькими процессами работало так, как предполагалось, но, в конце концов, эмулированные браузеры не всегда работали как настоящие браузеры, и решение в целом не было на 100% надежным.

Я надеюсь, что это поможет кому-то в будущем.

25.01.2011
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

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

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...