Вредоносное ПО (malware) - это назойливые или опасные программы,...
31.08.2016
Новый сервис спутниковой охраны выходит на рынок. Каковы его ключевые особенности и функциональные возможности?
Архитектура DOZOR выглядит следующим образом. Центральным звеном выступает «облачная» платформа на базе MS (Microsoft) Azure. Отзывы по поводу данной системы исключительно положительные, о чем свидетельствует мнение экспертов Compuware, назвавших ее наиболее быстрой «облачной» платформой из существующих сегодня.
Управление спутниковым устройством владелец осуществляет посредством смартфона, на котором установлено официальное мобильное приложение от DOZOR, доступное для скачивания в AppStore или GooglePlay.
Фундамент комплекса основан на проверенным временем оборудовании AUTOLIS с проработанным алгоритмом криптографического преобразования, благодаря чему вероятность интеллектуального взлома сведена к нулю. DOZOR характеризуется высокой степенью бдительности, поэтому даже при наличии ключей сведения о несанкционированном использовании автомобиля и тревожный сигнал мгновенно поступают в штаб мониторинга.
DOZOR уделил существенное внимание не только безопасности транспортного средства, под которой подразумевается вызов службы оперативного реагирования, уведомления о тревожных событиях, оповещение об эвакуации, но и комфорту его владельца. Данный охранный комплекс позволяет с помощью смартфона управлять такими функциями вашего автомобиля, как установка климата в салоне, активация автозапуска, поиск на парковке.
DOZOR совместно с партнерами также разработал ряд эксклюзивных предложений для своих клиентов. Во-первых, предусмотрены дисконтные программы страхования КАСКО по риску «Ущерб». Исходя из вашего стиля вождения, размер выгоды может достигать 50% от стоимости полиса. Во-вторых, пользователям предоставляется скидки в размере до 95% по риску «Угон». Имеется также ряд выгодных предложений по техническому обслуживанию от дилерских центров.
На выбор предлагается один из трех тарифов: Dozor Х, Dozor Business, Dozor Revolution, которые отличаются друг от друга набором функциональных возможностей и размером ежемесячной абонентской платы.
Dozor Х это базовый вариант и оснащен набором из 10 функций. Для него характерна выход на связь в программируемое время (по будильнику) дважды за день, а также информирование о местоположении транспортного средства по GPS, ГЛОНАСС или LBS (сигнал базовых станций).
Уменьшение риска обнаружения злоумышленниками устройства достигается за счет пассивного характера работы DOZOR X без излучения сигнала. В случае угона автомобиля предусмотрено силовое реагирование с привлечением ГБР и правоохранительных органов. Основные конкуренты Dozor Х это Arkan Pulsar, Cobra Zoom Box, Cesar Tracer A, АВО уровень 1, АВТОЛОКАТОР Satellite X, от которых Dozor Х отличается меньшей суммой абонентской платы (от 500 руб. в месяц против, например, 1000 руб. у Arkan Pulsar).
Dozor Business обладает более широким набором функциональных возможностей в сравнении с Dozor Х: функция контроля текущего состояния авто (аккумуляторная батарея, температура, состояние периметра), получение информации о местоположении на карте, возможность управления из диспетчерского центра в соответствии с запросом. Силовое реагирование по следующим событиям: несанкционированное вскрытие дверей, капота или багажного отделения; разряд/отключение АКБ; несанкционированное включение зажигания; несанкционированное перемещение транспортного средства; срабатывание датчика «удара»; срабатывание кнопки тревожной сигнализации.
Функция «Охрана» автоматически блокирует мотора, а снятие с данного режима осуществляется за счет радиометки. Иммобилайзер оснащен механизмом АнтиХайДжек (Anti-Hi-Jack) и активируется в том случае, когда водителя насильно заставили покинуть свое авто. Спустя некоторое непродолжительное время автосигнализация подает сигнальный импульс на блокировку мотора и переходит в режим тревоги с дальнейшим выездом экипажа ГБР. Конкурентными аналогами Dozor Business являются Arkan Satellite VIP, Cobra Best Luxe, АВО уровень 5, Cesar Premium X+, Spring Динамический, АСПИД HARD, АВТОЛОКАТОР Супер X.
Dozor Revolution. В плане реагирования флагманский продукт в линейке Dozor ничем не отличается от версии Dozor Х, однако имеет повышенный уровень защиты ТС, в зависимости от автомобиля реализуется до четырех цифровых блокировок.
Помимо основных тарифов, клиент может подключить дополнительные услуги согласно пакетам Эксперт, Мобайл и VIP, предусматривающих ряд полезных опций, например, юридическая консультация с места ДТП или эвакуация с места ДТП. В пакет Мобайл входит услуга технической помощи на дорогах и визуальное отображение прокладки пути непосредственно до авто. К пакету VIP дополнительно вы получите персонального менеджера.
Dozor Revolution по стоимости и функционалу сравним с Arkan Satellite VIPP+, Cobra Global Max, Cesar Premium X+, АВТОЛОКАТОР Супер X. Различия, как всегда, в деталях. Технических и сервисных. Технические - Dozor функционирует на оборудовании AUTOLIS, имеющего высокую степень надежности и защищенности. Тысячи клиентов успели в этом убедиться за годы существования производителя. Сервисные - скорость передачи сигнала о тревоге, которая составляет 7 секунд. Максимальное время прибытия полицейского экипажа и группы быстрого реагирования с момента отправки такого сообщения составляет 15 минут. Производителем заключено соглашение о партнерстве с компанией Delta, состав которой включает 6900 лицензированных специалистов охраны, а региональные пункты действуют в 30 субъектах РФ. Предусмотрена возможность одновременного привлечения экипажей ГИБДД, ППС и сотрудников МВД.
Dozor предлагает легкую интеграцию своего сервиса как со страховыми компаниями, так и с автопроизводителями, что позволяет транслировать телематические сведения сразу в обе стороны, благодаря чему клиент получает возможность воспользоваться лучшими предложениями по страхованию КАСКО за счет страховой телематики.
В этой статье мы начнём разбираться с более сложными и функционально-законченными скриптами. Пройдём по шагам через все стадии - начиная с постановки задачи и заканчивая универсальным скриптом, готовым к употреблению. И начнём с проверки формы перед отсылкой на сервер.
Общие соображения и html-код формы
Проверка формы, пожалуй, одна из наиболее часто применяемых функций. Редкий сайт обходится без какой-либо её вариации, будь то простая отсылка сообщения на e-mail или форма сложного заказа в интернет-магазине. Польза скрипта очевидна - проверить, что пользователь заполнил все нужные поля перед отправкой и тем самым избежать проблемы получения пустых писем или отсутствия контактной информации отправителя.
Предположим, что форма у нас уже есть и состоит из следующих 4-х полей: имя, электронный адрес, тема сообщения и непосредственно само сообщение. Соответствующий html-код для такой формы будет выглядеть примерно так:
< form action = "/cgi-bin/formmail.cgi" onsubmit = "return sendform();" >
Ваше имя
: *<
input type
=
"text"
name
=
"name"
><
br
>
Электронный адрес
: *<
input type
=
"text"
name
=
"email"
><
br
>
Тема сообщения
: <
input type
=
"text"
name
=
"subject"
><
br
>
Сообщение
: <
textarea name
=
"message"
><
br
><
br
>
<
input type
=
"submit"
value
=
"Отправить"
>
<
input type
=
"reset"
value
=
"Очистить"
>
* - необходимые для заполнения поля
Заметьте, что в отличие от обычной формы непосредственно в теге мы отслеживаем событие onsubmit и при его наступлении вызываем функцию проверки формы sendform().
Почему выбран именно такой способ вызова функции? Ведь можно было применить, например, событие onclick? Ответ простой - при использовании события onclick кнопку "submit" придётся заменить обычной кнопкой. И, в случае, если в броузере отключена поддержка javascript, мы не сможем отправить форму (!). Отслеживание же события onsubmit лишено этого недостатка, т.к. даже при отключенной поддержке скриптов форма будет отправлена.
Если Вы внимательно присмотритесь к html-коду нашей формы, то заметите, что рядом с этими полями я поставил звёздочку, а в конце формы разместил сноску. Сделано это, разумеется, для удобства и элементарного уважения к пользователю.
Функция проверки формы перед отправкой
А теперь перейдём к главному - к написанию той самой функции, что будет непосредственно осуществлять проверку формы. Давайте подумаем, что нам от неё требуется? Ну, во-первых, проверить, что нужные поля заполнены, а во-вторых - отослать форму. В случае же, если несколько из обязательных полей пусты, нам нужно сформировать об этом сообщение пользователю и переместить курсор на соответствующий элемент.
Для начала напишем общую обвязку функции:
<
script language
=
"javascript"
>
Применённый нами способ вызова функции через событие onsubmit в качестве результата работы функции требует возврата одного из логических значений: true или false. И, в зависимости от этого значения, форма либо будет отправлена, либо нет.
Теперь попробуем написать проверочную функцию, привязанную к данной конкретной форме. Как Вы помните, необходимых для заполнения полей у нас всего два: имя посетителя и его электронный адрес. Самое простое - это проверить содержимое каждого из обязательных полей на отсутствие текста:
<
script language
=
"javascript"
>
Как видите, функция проверки состоит из двух идентичных блоков, различающихся только именем проверяемого поля. Давайте прокомментируем каждую строчку в этих блоках:
Сначала проверяем, что данное поле является пустым. И если это так, то
выводим сообщение об ошибке при помощи встроенной функции alert(). После того, как пользователь закроет окошко, мы
воспользуемся методом focus() и переместим курсор на ошибочное поле. И, наконец,
выйдем из функции, установив флажок успешности выполнения в false.
В случае же, если проверяемое поле не было пустым, то соответствующий блок просто пропускается. При пропуске всех проверочных блоков функция в качестве результата возвращает true, что свидетельствует об успешной проверке.
Универсальная функция проверки
Если нам необходимо проверить всего два или три поля, то с таким методом проверки "по-одиночке" ещё можно смириться, но что, если их несколько десятков? А ведь такое не редкость - особенно в сложных анкетах. Поэтому мы немного модифицируем нашу функцию, чтобы она не зависела от количества проверяемых полей.
Первым делом мы создадим массив, где перечислим имена всех полей, которые требуют проверки:
Required = new array("name", "email");
Такой подход позволит нам очень легко добавлять и модифицировать список обязательных полей без непосредственного изменения кода самой функции.
Дополнительно к вышеописанному массиву мы добавим ещё один, который будет содержать текст ошибки для конкретного поля:
Required_show = new array("Ваше имя", "электронный адрес");
Это позволит нам свободно варьировать текст об ошибках и правильно пользоваться русским языком, а не удовольствоваться неудобоваримыми фразами типа "name не введён".
Имея массив обязательных для заполнения полей, всю проверку можно осуществлять в цикле. Вот как будет выглядеть модифицированная функция проверки:
<
script language
=
"javascript"
>
В цикле происходит проверка всех полей формы на совпадение с "обязательными". В случае, если совпадение произошло, проверка осуществляется аналогично тому, как это было описано выше, но с одним нюансом - введение массива с сообщениями об ошибках потребовало небольшой модификации функции alert(), так что теперь текст ошибки напрямую зависит от имени поля.
Вот, в общем-то, и всё. Данная функция вполне универсальна и с минимальными корректировками (в сущности - содержимое двух массивов) может быть адаптирована к любой форме.
Назад |
title | Он, конечно, стандартный, но сюда мы запишем сообщение об ошибочном заполнении поля. И выводить будем в стиле «Укажите »+title |
cfm_check | Флаг проверки, именно по нему мы и будем искать проверяемые поля. А значения он может принимать следующие:
|
cfm_confirminfo | По умолчанию ошибки будут выводиться сразу после проверяемого элемента, что не всегда удобно. Так пусть же в этом атрибуте мы укажем jq-селектор на элемент, после которого выводить ошибку. Например, cfm_confirminfo=’#placeForErrors’ |
cfm_function | Чтобы не усложнять перегруженный cfm_check, сюда мы запишем название нестандартной функции-проверки поля |
Информацию мы получили, осталось лишь ее обработать. Алгоритм здесь не замороченный:
- на вход подаем указатель на форму, в которой делать проверку (у нас же много форм может быть на странице!);
- пробегаем по указанным элементам формы, проверяя корректность заполнения;
- если ошибки есть – маркеруем их, если нет – разрешаем проверку формы.
Наверное, уже пора выдать js-код, реализующий функционал хотя бы частично, раз уж отписана такая куча текста?
If(typeof cFM_classError === "undefined")//сюда запишем css-класс, приписывающийся неправильным полям var cFM_classError="cFM_wrong"; function cFM_checktrueAttr(parent)//подготавливает данные к обработке //(parent – jq-указатель на форму, или объединяющий блок) { var error=true; //подчищаем за вызванной ранее функцией $("div."+cFM_classError).remove();//убираем подсказки $("."+cFM_classError).each(function(){//убираем подсветку ошибок $(this).removeClass(cFM_classError); }); //ищем поля для проверки var inputsToHandle=false; if(typeof parent !== "undefined") inputsToHandle=parent.find(""); else inputsToHandle=$("");//ну, а если родитель не задан – давайте уж все проверим //хватаем найденные элементы и наблюдаем их inputsToHandle.each(function(){ if(error) error=cFM_prepareChecking(this);//проверяем объекты, ищем хотя бы единственную ошибку else cFM_prepareChecking(this); }); return error;//возвращаем true, если все элементы прошли ошибку, и false, если кто-то завалился } function cFM_prepareChecking(handle)// запускает проверку конкретного элемента и маркерует ошибочные { var error=true;/*возвращаемое значение; смысл - просто показать, что есть ошибка принимает значение: true - нет ошибок; false - поле не заполнено; "wrong" - поле заполнено неправильно;*/ //определяемся с подписью поля в случае обнаружения в нем ошибки. По умолчанию будет выводиться //"Укажите значение поля", если title не задан var title = " значение поля"; if(typeof $(handle).attr("title") !== "undefined" && $(handle).attr("title").length>0) title=$(handle).attr("title"); var after = handle;//куда лепить сообщение об ошибке var attribute = $(handle).attr("cFM_check");//значение великого атрибута cFM_check //а не задали ли какую хитрую функцию для проверки поля? if(typeof $(handle).attr("cFM_function") !== "undefined") var chkFunk=$(handle).attr("cFM_function"); //наконец, проверяем поле if(typeof chkFunk !== "undefined") error=window($(handle)); else error=cFM_checkFullness(handle); //коль ошибка закралась к нам if(error!==true) { //определяем, куда лепим сообщение об ошибке if(typeof $(handle).attr("cFM_confirmInfo") !== "undefined") { after=$(handle).attr("cFM_confirmInfo"); if(after.indexOf("self")===0)//если вдруг селфы непойми зачем прилепили after=after.substr(4); } if(error==="wrong")//коль поле заполнено неправильно $(after).after("
Неверное значение поля
"); else{ if(error===false)//коль не заполнено вообще $(after).after("
Укажите "+title+"
");//html ошибки else//если особая проверка с особой html $(after).after(""); } $(handle).addClass(cFM_classError);//добавление класса ошибки if($(handle).attr("type")=="radio")//дорабатываем радиокнопки $("").addClass(cFM_classError); error=false; } return error; } function cFM_checkFullness(handle)//а это стандартная функция проверки { var error = true; //считываем данные с атрибутов var attribute = $(handle).attr("cFM_check"); //флаг обязательности var required = true; if(attribute.indexOf("Y")===-1) required=false; //проверка на формат var format=attribute; if(required) format=attribute.substr(2); switch($(handle).attr("type"))//смотрим, что же у нас за элемент такой { case "checkbox": if(!$(handle).prop("checked")) error=false; break; case "radio"://обещанная проблема с radio if(!$(handle).prop("checked") && $(":checked").length==0) error=false; else error=true; break; //и text, и select, и textarea здесь идентичны default: if(($(handle).val().trim().length==0 || $(handle).val()=="0") && required) error=false; else { if(format==="num")//проверка на число { var regCheck = new RegExp("[^0-9\s-]+"); if(regCheck.test($(handle).val())) error="wrong"; } if(format==="email")//проверка на е-мейл { var regCheck = new RegExp("^(+[-._+&])*+@([-0-9a-zA-Z]+[.])+{2,6}$"); if(!regCheck.test($(handle).val())) error="wrong"; } } break; } return error; }
В качестве примера приведем так же особую функцию проверки, например, проверяющую на наличие двух слов в инпуте (Имя Фамилия или Имя,Фамилия). Инпут, запускающий проверку по этой функции реализуется таким образом:
А функция проверки будет выглядеть, например, так: function checkName(handle) { var handleValue=handle.val().trim(); //как показывает практика, пользователи чем только не отделяют свое имя от фамилии if(handleValue.indexOf(" ")!==-1 || handleValue.indexOf(",")!==-1 || handleValue.indexOf(".")!==-1) return true; else return false; } Ну и стиль надо бы какой-нибудь нашей проверке задать: div.cFM_wrong { color:red; font-size:10px; position:absolute; width:140px; } input.cFM_wrong{ background: #ffd9d9; border-color:#d3adad; } Скрипт валидации формы.Теперь в случае успешного выполнения функции cFM_checkFullness() (то есть возвращения true) скрипт должен отсылать форму на обработку. Как это реализовать - зависит уже от конкретной формы. Если подтверждение на отправку идет через кнопку submit - то можно подписаться на событие отправки формы (onsubmit) и в зависимости от результата проверки отсылать ее или нет. Например, так:
а тут типа куча тегов формы Если же отправка идет с помощью ajax"а - то тут вообще все просто: вызывать его в зависимости от результата работы функции cFM_checktrueAttr($(this)); Дополнительные заморочки.
В приведенном выше коде отсутствует проверка на группы (ибо громоздкость кода возрастает в разы, а размер полосы прокрутки данной статьи итак наверняка отпугнул многих посетителей). Различия же в алгоритме будут незначительны: проверка элементов по группам должна запускаться в отдельном блоке, и в зависимости от работы всего блока выдавать сообщение об ошибке в конкретном элементе.
Правда, на этом моменте стоит притормозить и задуматься: а действительно ли необходимо дорабатывать код для поддержки групп, или можно ограничиться написанием отдельной функции проверки для пары сложных полей?
Что же мы имеем в итоге? Подключая пару файлов (.js и.css), получаем функционал проверки свойств, который можно со спокойной душой кидать на любые сайты, при условии подключенного jquery. Ведь куда приятнее иметь под рукой набор готовых инструментов, чем тратить кучу времени на их производство перед каждой однотипной задачей.
Подключение и примерыВо-первых нам понадобится библиотека jquery. Скачать ее можно, например, с официального сайта .
Или же просто вставить в шапку (то, что внутри тега ) вашего сайта строку
Затем качаем (правой клавишей -> понравившийся пункт со словом «сохранить») отсюда файл с js-кодом и, если нужно, файл с css-стилями для ошибочных полей отсюда .
Добавляем в шапку и их тоже:
Теперь нужно расставить атрибуты полям формы согласно , в зависимости от того, какую проверку вы хотите совершить.
Последний штрих - добавление тегу события onsubmit: «onsubmit="return cFM_checktrueAttr($(this));"».
Давайте теперь попробуем реализовать проверку такой простенькой формы.
Те, кто занимается созданием сайтов, в какой-то момент сталкиваются с необходимостью проверки заполнения пользователем полей формы, размещённой на сайте. Для этого создаётся какой-то вариант проверки пустых полей, который используется в своих проектах. Но для каждого случая количество полей, которые необходимо проверить, может быть разным. Это приводит к тому, что созданный вариант проверки необходимо изменять в зависимости от конкретных условий, и в дальнейшем у нас появляется уже несколько его модификаций.
Кроме того, на одной странице сайта может размещаться несколько форм, у каждой из которых будет разное количество обязательных для заполнения полей. В результате код будет включать в себя несколько блоков с одинаковыми функциями, но разными условиями, что не всегда является правильным решением.
В своей практике мне тоже приходилось использовать разные варианты проверки заполнения полей формы в зависимости от конкретных условий. И в файле *.js присутствовало несколько функций для проверки разных форм, что увеличивало объём кода и ухудшало его восприятие.
В какой-то момент было принято решение написать вариант универсального способа проверки пустых полей, который можно будет использовать для любой формы с любым количеством обязательных полей. Необходимыми условиями такого способа были определены простота и отсутствие громоздких конструкций. В результате был найден способ, который полностью меня устроил и простотой, и универсальностью.
Суть этого способа:
Пример разметки формы:
Заголовок формы #1 Обязательно для заполнения Обязательно для заполнения
Пример кода проверки полей:
$(".js-form-validate").submit(function () { var form = $(this); var field = ; form.find("input").each(function () { field.push("input"); var value = $(this).val(), line = $(this).closest(".some-form__line"); for(var i=0;i