Статус: Новичок
Группы: Участники
Зарегистрирован: 18.05.2016(UTC) Сообщений: 7
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
Добрый день! Стоит задача: выполнить проверку наличия и работоспособности плагина, загрузить файл с компьютера пользователя и подписать. При этом файл загружается с помощью скрытого input'а с типом "file", который активируется (кликается) программно при наличии плагина. Пример реализации: https://jsfiddle.net/xpvt214o/340888/ или одним файлом:
Код:<html>
<head>
<meta charset="utf-8" />
<title>Подпись</title>
<style>
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#model {
background: #fff;
border-radius: 4px;
padding: 20px;
font-size: 25px;
text-align: center;
transition: all 0.2s;
margin: 0 auto;
width: 300px;
}
button {
background: #0084ff;
border: none;
border-radius: 5px;
padding: 8px 14px;
font-size: 15px;
color: #fff;
}
#model.alt {
background: #0084ff;
color: #fff;
margin-top: 40px;
width: 200px;
}
#model.alt button {
background: #fff;
color: #000;
}
</style>
<script src="jquery-1.7.1.js" type="text/javascript"></script>
<script src="cadesplugin_api.js" type="text/javascript"></script>
<script type="text/javascript">
function СheckPluginAndSelectFile(source){
var modelId = "#"+$(source).parents('.fileUpload').attr("id");
ClearMessage(modelId);
Promise.resolve()
.then(() => { return cadesplugin.CreateObjectAsync("CAdESCOM.About"); })
.then((oAbout) => { return oAbout.PluginVersion; })
.then((pluginVersion) => { return pluginVersion.toString(); })
.then((version) => console.log(version))
.then(() => SelectFile(modelId))
.catch(
(err) => {
console.log(err);
ShowError(modelId);
});
return false;
}
function SelectFile(modelId) {
$(modelId + "_file").click();
ShowMessage(modelId, 'Плагин ОК');
}
function ShowError(modelId){
ShowMessage(modelId, 'Ошибка плагина')
}
function ShowMessage(modelId, errorText){
$(modelId+"_error").text(errorText);
$(modelId+"_error").show();
}
function ClearMessage(modelId){
$(modelId+"_error").text();
$(modelId+"_error").hide();
}
function SignFile(source){
if (source.files[0] == null) {
return;
}
var filename = source.value.split('\\').pop();
var modelId = "#"+$(source).parents('.fileUpload').attr("id");
ShowMessage(modelId, filename);
}
</script>
</head>
<body>
<div class="fileUpload" id="model">
<span style="display: none;" id="model_error"></span>
<input type="file" style="display: none;" id="model_file" onchange="return SignFile(this);">
<button class="btn" id="model_select" onclick="СheckPluginAndSelectFile(this); return false;">Открыть</button>
</div>
</body>
</html>
Разное поведение браузеров заключается в следующем: 1) В FireFox 61.0 (64-bit), все отрабатывает нормально, наличие плагина проверяется, диалог выбора файла открывается, файл загружается; 2) В Chromium Gost 67.0.3396.62 (Official Build) (32-bit), есть проблема: наличие плагина проверяется, но диалог выбора файла не открывается и файл не загружается; 3) В Google Chrome 67.0.3396.99 (Official Build) (64-bit), есть проблема: наличие плагина проверяется, но диалог выбора файла не открывается и файл не загружается; Если в коде закоментировать строки: Код:.then(() => { return cadesplugin.CreateObjectAsync("CAdESCOM.About"); })
.then((oAbout) => { return oAbout.PluginVersion; })
.then((pluginVersion) => { return pluginVersion.toString(); })
.then((version) => console.log(version))
то в хроме диалог выбора файла открывается, но плагин не проверяется. Это какая-то ошибка в моем коде или баг в плагине или в хроме?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Попробуйте у себя Promise.resolve() заменить на cadesplugin.then(
Плагин готов к работе когда резолвится промис cadesplugin. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 18.05.2016(UTC) Сообщений: 7
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
Благодарю за ответ! Попробовал, не помогло, проверка плагина проходит, но после этого поле для загрузки файла (id="model_file") в хроме не активируется.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close