Полный пример подключения и инициализации JC-WebClient. Реализованы следующие шаги:
JCWebClient.js
.// 1. Загрузка скрипта JCWebClient.js
getJCWebClient({
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);
}
}