Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline bazooka  
#1 Оставлено : 20 января 2016 г. 9:52:53(UTC)
bazooka

Статус: Активный участник

Группы: Участники
Зарегистрирован: 17.09.2014(UTC)
Сообщений: 123
Мужчина

Сказал «Спасибо»: 5 раз
Поблагодарили: 2 раз в 2 постах
Добрый день!
Хочу поделиться найденным недочетом в вашем cadesplugin_api.js
Проблема в функции

Код:

function isChromiumBased()
    {
        var retVal_chrome = navigator.userAgent.match(/chrome/i);
        var retVal_opera = navigator.userAgent.match(/opr/i);

        if(retVal_chrome==null) // В Firefox работаем через NPAPI
            return false;
        else
        {
            if((retVal_chrome.length>0) && (retVal_opera==null)) // В Chrome работаем через асинхронную версию
            {
                return true;
            }

            if((retVal_opera!=null) && (retVal_opera.length>0)) // В Opera работаем через NPAPI
            {
                return false;
            }
        }    
    }


Дело в том, что в некоторых версиях IE8 с подключенным плагином chromeframe он определяется как
Код:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; chromeframe/29.0.1547.67; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)


Поэтому мы попадаем на вот этот if
Код:
if((retVal_chrome.length>0) && (retVal_opera==null)) // В Chrome работаем через асинхронную версию


Хотя, это IE8!!

Для решения проблемы нужно дополнить скрипт примерно так:

Код:

function isChromiumBased() {
        var retVal_chrome = navigator.userAgent.match(/chrome/i);
	var retVal_chromeframe = navigator.userAgent.match(/chromeframe/i);
        var retVal_opera = navigator.userAgent.match(/opr/i);

        if (retVal_chrome == null) // В Firefox работаем через NPAPI
            return false;
        else {
            if (retVal_chrome.length > 0 && (retVal_chromeframe ==null || retVal_chromeframe.length==0) && (retVal_opera == null)) // В Chrome работаем через асинхронную версию
            {
                return true;
            }

            if ((retVal_opera != null) && (retVal_opera.length > 0)) // В Opera работаем через NPAPI
            {
                return false;
            }
        }
    }


и все заработает как надо.
Поправьте, пожалуйста:)
Offline cross  
#2 Оставлено : 20 января 2016 г. 12:06:52(UTC)
Анатолий Беляев

Статус: Сотрудник

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
Исправим. Спасибо за сообщение!
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline bazooka  
#3 Оставлено : 21 января 2016 г. 13:32:05(UTC)
bazooka

Статус: Активный участник

Группы: Участники
Зарегистрирован: 17.09.2014(UTC)
Сообщений: 123
Мужчина

Сказал «Спасибо»: 5 раз
Поблагодарили: 2 раз в 2 постах
Продолжаю бороться с IE8.
У одного из клиентов обнаружилась опять проблема с cadesplugin_api.js

Дело в том, что следующая функция
Код:

function load_npapi_plugin() {
        var elem = document.createElement('object');
        elem.setAttribute("id", "cadesplugin_object");
        elem.setAttribute("type", "application/x-cades");
        elem.setAttribute("style", "visibility=hidden");
        document.getElementsByTagName("body")[0].appendChild(elem);
        pluginObject = document.getElementById("cadesplugin_object");
        if (isIE()) {
            var elem1 = document.createElement('object');
            elem1.setAttribute("id", "certEnrollClassFactory");
            elem1.setAttribute("classid", "clsid:884e2049-217d-11da-b2a4-000e7bbb2b09");
            elem1.setAttribute("style", "visibility=hidden");
	    document.getElementsByTagName("body")[0].appendChild(elem1);	       
    }


падала на 13 строке с ошибкой "не поддерживается интерфейс"...
Честно говоря я не совсем понял в чем проблема, суть описана, к примеру тут https://tamentis.com/doc/no_such_interface/
Но решение предложенное там не работает.
Я попробовал просто взять этот код в
try - catch
с пустым блоком catch. И, вуаля, как ни странно, сработало - скрипт перестал падать и элемент по ходу добавляется...

Если вы подскажете, в чем суть и как это исправить нормально, а не костыльно, то буду очень рад.

Проблема возникает в IE 8.0.7601.17514 на Windows 7 sp1
navigator.userAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; MRSPUTNIK 2, 4, 1, 100; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)"

Отредактировано пользователем 21 января 2016 г. 13:34:43(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.