Начало работы
USB-токены и смарт-карты JaCartaAPI и SDKUSB-токены и смарт-карты JaCarta
Полный пример подключения и инициализации JC-WebClient. Реализованы следующие шаги:
- Загрузка скрипта
JCWebClient.js. - Инициализация JC-WebClient.
- Цикличная проверка версии JC-WebClient.
// 1. Загрузка скрипта JCWebClient.jsgetJCWebClient({ onLoad: function() { // Скрипт JCWebClient.js загружен и модуль JCWebClient2 установлен console.log('JC-WebClient установлен');
// 2. Инициализация JC-WebClient JCWebClient2.initialize(); console.log('JC-WebClient был успешно инициализирован');
// 3. Цикличная проверка версии JC-WebClient checkJCWebClientVersion(function() { // Версия JC-WebClient корректна console.log('Версия JC-WebClient корректна. Продолжаем работу...'); }); }, onError: function(error) { // Скрипт JCWebClient.js не загружен
this.onError = undefined; // очищаем callback для того, чтобы код ниже выполнился только самый первый раз
// Отобразите пользователю информационное сообщение о необходимости установить JC-WebClient. // В этом же сообщении сообщите о том, что загрузка инсталлятора JC-WebClient на ПК пользователя // начнётся автоматически, но если не началась в течение, например, 5 секунд, // предложите нажать на специальную ссылку для скачивания инсталлятора с Web-сервера. console.log('Установите JC-WebClient !!!'); }});
/* Цикличная проверка версии JC-WebClient. Асинхронная функция.
@param done - callback-функция, срабатывающая при успешной проверке версии JC-WebClient.*/function checkJCWebClientVersion(done) { var failureCount = 0; // Счетчик некорректных версий
// Начать проверку версии JC-WebClient checkVersion();
// Внутренняя функция проверки версии JC-WebClient function checkVersion() { // Получение версии JC-WebClient JCWebClient2.getJCWebClientVersion({ async: true, onResult: function(version, error) { if(typeof(error) !== 'undefined') { // Можно обработать ошибки в соответствии с бизнес-логикой console.log('Ошибка получения версии JC-WebClient: ' + error); }
// Проверка версии JC-WebClient if(/* Условие некорректности version */) { // Версия не подходит ++failureCount;
if(failureCount === 1) { // Сообщите пользователю о том, что для корректной работы Web-приложения необходима версия JC-WebClient, отличная от текущей. // Это сообщение отобразится только самый первый раз console.log('Обновите JC-WebClient !!!'); }
// Повторная проверка версии JC-WebClient после 2-х секундного таймаута setTimeout(function() { checkVersion(); }, 2000); return; }
if(failureCount !== 0) { // Перезагрузить страницу, т.к. ранее был подключен JC-WebClient неподходящей версии window.location.reload(); return; }
// Версия JC-WebClient корректна done(); } }); }}
/** Цикличная загрузка модуля JCWebClient2. Асинхронная функция.
@param params - объект с callback-функциями: onLoad - функция срабатывает при успешной установке модуля JC-WebClient. Может быть вызвана только один раз; onError - функция срабатывает неудачной установке модуля JC-WebClient. Может быть вызвана несколько раз.*/function getJCWebClient(params) { // Проверка наличия модуля JC-WebClient на Web-странице if (typeof(JCWebClient2) !== 'undefined') { // Модуль JCWebClient2 установлен params.onLoad(); return; }
// Получение скрипта JC-WebClient getScript( 'https://localhost:24738/JCWebClient.js', params.onLoad, function(error) { if(typeof(params.onError) === 'function') { params.onError(error); }
// Повторная попытка получения скрипта после 2-х секундного таймаута setTimeout(function() { getJCWebClient(params); }, 2000); } );}
/** Функция загрузки скрипта. @param src - адрес расположения скрипта; @param done - callback-функция, срабатывающая при успешной загрузки скрипта; @param fail - callback-функция, срабатывающая при неудачной загрузки скрипта.*/function getScript(src, done, fail) { var parent = document.getElementsByTagName('body')[0];
var script = document.createElement('script'); script.type = 'text/javascript'; script.src = src;
if (script.readyState) { // IE script.onreadystatechange = function () { if (script.readyState === "loaded" || script.readyState === "complete") { script.onreadystatechange = null; // На некоторых браузерах мы попадаем сюда и в тех случаях когда скрипт не загружен, // поэтому дополнительно проверяем валидность JCWebClient2 if (typeof (JCWebClient2) === 'undefined') { onFail("JCWebClient is invalid"); } else { done(); } } else if (script.readyState !== "loading") { onFail("JCWebClient hasn't been loaded"); } } } else { // Others script.onload = done; script.onerror = function() { onFail("JCWebClient hasn't been loaded"); }; }
parent.appendChild(script);
function onFail(errorMsg) { parent.removeChild(script); fail(errorMsg); }}
