Обнаружьте режим эмуляции IE8 [дубликат]

Я записал функция высшего порядка , чтобы заставить его работать правильно. Мы использовали это в нескольких проектах, и это, кажется, работает отлично. Это - то, как вещи должны были быть сделаны от запуска без парадигмы "использования" или и так далее.

TReturn UseService(Func code)
{
    var chanFactory = GetCachedFactory();
    TChannel channel = chanFactory.CreateChannel();
    bool error = true;
    try {
        TReturn result = code(channel);
        ((IClientChannel)channel).Close();
        error = false;
        return result;
    }
    finally {
        if (error) {
            ((IClientChannel)channel).Abort();
        }
    }
}

можно выполнить вызовы как это:

int a = 1;
int b = 2;
int sum = UseService((ICalculator calc) => calc.Add(a, b));
Console.WriteLine(sum);

Это в значительной степени точно так же, как Вы имеете в своем примере. В некоторых проектах мы пишем вспомогательные методы со строгим контролем типов, таким образом, мы заканчиваем тем, что писали вещи как "Wcf. UseFooService (f => f...)".

я нахожу это довольно изящным, учитывая все обстоятельства. Существует ли конкретная проблема, с которой Вы встретились?

Это позволяет другим изящным функциям быть включенными. Например, на одном сайте, сайт проходит проверку подлинности к сервису от имени зарегистрированного пользователя. (Сайт не имеет никаких учетных данных отдельно.) Путем записи нашему собственному помощнику метода "UseService", мы можем настроить фабрику канала путем, мы хотим и т.д. Мы также не связываемся с использованием сгенерированных прокси - любой интерфейс сделает.

27
задан Community 23 May 2017 в 12:16
поделиться

5 ответов

Вам нужно проверить значение document.documentMode, которое будет иметь значение 8 в истинном режиме IE8 и 7 в Режим IE7. Строка пользовательского агента будет идентична в обоих случаях и по-прежнему будет указывать на IE8. Обратите внимание, что эта переменная JavaScript доступна только в IE8.

12
ответ дан 28 November 2019 в 05:19
поделиться

Не совсем «обнаружение режима совместимости с IE8», но это может также помочь:

Если у вас есть доступ к самому серверу, вы можете отправить HTTP-заголовок, взгляните на Блог Майка Ормонда об этом . На странице MSDN для реализации метапереключателя на IIS есть подробности о заголовке и о том, как его установить / отправить.

1
ответ дан 28 November 2019 в 05:19
поделиться

IE8 включает маркер трезубца в строку User-Agent независимо от режима совместимости.

См. MSDN для получения дополнительных сведений: http://blogs.msdn.com/ie/ archive / 01.09.2009 / the-internet-explorer-8-user-agent-string-updated-edition.aspx

IE7 в Windows Vista
Mozilla / 4.0 (совместимый; MSIE 7.0 ; Windows NT 6.0)

IE8 в Windows Vista (режим совместимости)
Mozilla / 4.0 (совместимый; MSIE 7.0 ; Windows NT 6.0; Trident / 4.0 )

IE8 в Windows Vista
Mozilla / 4.0 (совместимый; MSIE 8.0 ; Windows NT 6.0; Trident / 4.0 )

24
ответ дан 28 November 2019 в 05:19
поделиться

Проблема на самом деле становится еще более сложной, когда вы имеете дело со ссылками, поступающими на ваш сайт с сайтов BLACKLIST с эмуляцией IE8, таких как Facebook.

Совместная ссылка на Facebook заставляет ваши ссылки открываться во всплывающем окне - ЕСЛИ «ВКЛЮЧИТЬ ОБНОВЛЕНИЕ ВЕБЛИСТОВ» отмечен в настройках просмотра совместимости, который установлен по умолчанию, всплывающее окно видит источник перехода из черного списка из Facebook и первоначально открывает окно в режиме черного списка. При поиске в фоновом режиме для Trident \ 4.0 - вы увидите значение и установите CSS нижнего уровня.

Однако после загрузки браузера он переключается из режима совместимости и переходит в режим СТАНДАРТ без обновления. Следовательно, у вас неправильный CSS для стандартных режимов.

Решение - вывести браузер IE из режима совместимости. Ага - кажется странным, зачем позволять пользователю переходить на более низкий уровень на вашем сайте, если вам это не нужно.

Так же, как и на нижнем уровне, вы устанавливаете IE = EmulateI7, чтобы принудительно выключить браузер, вы можете добавить IE = EmulateIE8 и заставить пользователя просматривать вашу страницу в IE8 Standard . этот режим даже лишает их возможности выбирать просмотр в режиме совместимости и сокращает количество тестов для этого режима

2
ответ дан 28 November 2019 в 05:19
поделиться

FYI, для получения подробной информации о том, как обнаружить режим совместимости (AKA как обнаружить Compatibility View), пожалуйста, ознакомьтесь со следующей ссылкой...

http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx

...где представлена некоторая полезная информация.

5
ответ дан 28 November 2019 в 05:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: