Полный пример подключения и инициализации 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); }}