Имя: Пароль:
1C
Веб-мастеринг
Нужна помощь в javascript.
,
0 kumena
 
20.02.19
09:30
Здравствуйте!

Есть необходимость копировать в буфер обмена некий текст, пусть будет из переменной, после нажатия кнопки пользователем.
Эта функция

Функция УстановитьТекстВБуферОбмена(Текст) Экспорт
#Если Клиент Тогда
    Объект = Новый COMОбъект("htmlfile");
    Объект.ParentWindow.ClipboardData.Setdata("Text", Текст);
    Возврат Текст;
#КонецЕсли
КонецФункции  

в веб-клиенте не работает, я пробовал IE 11.

Пробую сделать это через javascript, но таланта пока не хватило. Здесь http://www.cyberforum.ru/javascript-beginners/thread2271518.html нашел функцию,

function copyToClipboard(text){
    var copytext=document.createElement('input')
    if(typeof text=='undefined') copytext.value=window.location.href
    else copytext.value=text
    document.body.appendChild(copytext)
    copytext.select()
    document.execCommand('copy')
    document.body.removeChild(copytext)
}


но переделать её так чтобы у меня заработала не получилось.
При выполнении вылетает ошибка 'document' - определение отсутствует.
Поясните, что означает переменная document и как можно исправить?
1 kumena
 
20.02.19
09:37
Суть этой функции, что если параметр text пустой, то копируется ссылка из реквизита, если не пустой, то копируется текст.
Думаю, что её можно переделать так

function copyToClipboard(text){
    var copytext=document.createElement('input')
    copytext.value=text
    document.body.appendChild(copytext)
    copytext.select()
    document.execCommand('copy')
    document.body.removeChild(copytext)
}

но уйти от переменной  document это не поможет.
2 DrWatson
 
21.02.19
11:43
Сделал обработку с html полем, в него вставил такую страницу:
<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <script>
function copyToClipboard(text){
    var copytext=document.createElement('input')
    copytext.value=text
    document.body.appendChild(copytext)
    copytext.select()
    document.execCommand('copy')
    document.body.removeChild(copytext)
}
</script>
</head><body>

<input type="button" value="Нажми для запуска копирования" onclick="copyToClipboard('Текст копирования')">

</body>
</html>

Всё работает и на IE11 в том числе. Так что тут вопрос скорее к тому как Вы эту функцию вставляете и вызываете?
3 kumena
 
22.02.19
14:20
Я уже плохо помню, что как делал, кучу вариантов перепробовал.
Другие функции скопированные в инете вызывались и работали, а эту, которую переделывал не смог тогда запустить.
Ваша функция работает, преогромное спасибо!!!
4 DrWatson
 
22.02.19
14:59
(3) А я надеялся, что Вы мне расскажите, как Вы вставляете и вызываете js функцию на форме 1С в веб-клиенте.
5 Patriot1C
 
22.02.19
14:59
https://developer.mozilla.org/en-US/docs/Web/API/document/execCommand#Browser_compatibility
Устаревшая, не рекомендуется использовать...
6 kumena
 
22.02.19
15:34
(4) ой, а я не понял! )))
да просто все, реквизит строка неограниченная, в при открытии заполняется текстом функции. На форме поле Поле HTML документа, в данных у него этот текст. Текст для копирования пишу в текстовый реквизит ПростоТекст

вызов функции кнопкой
    Элементы.FHTML.Документ.ParentWindow.copyToClipboard(ПростоТекст);

но, есть засада.
как только делаешь это поле невидимое, оно перестает быть COM объектом, и все не работает, до тех пор пока оно до нажатия кнопки не становиться видимым.
т.е. если установить видимость поля, нажать кнопку и снять видимость, то это работает только со второго раза, потому что после снятия видимости второй раз вызов функции падает, и снятия видимости не происходит.
7 kumena
 
22.02.19
15:40
вобщем, само это HTML поле нужно для работы функции, а чтобы на форме оно было видно, в этом надобности совсем нет, и надо его куда то спрятать.
Есть еще вариант если не прятать, то выводить туда то что будет копироваться (сейчас текст копирования в другом реквизите формы). Но как заполнить текстом это HTML поле, и чтобы функция не пропала?
8 kumena
 
22.02.19
15:49
получается, надо как то программно делать все.
9 Ник080808
 
22.02.19
16:05
(7) я в этом не силен, но вот кажется вам поможет эта статья http://catalog.mista.ru/public/398366/
10 Вафель
 
22.02.19
16:09
делай xtml поле частью интерфейса.
например заголовок туда выведи
11 kumena
 
22.02.19
19:57
(9) там нет ничего нового по "моему делу", да и работает у меня то, о чем там написано. Уверен, что там тоже не будет работать, если видимость поля убрать.
12 kumena
 
22.02.19
19:58
остается один вариант, сунуть его куда-то так, чтобы не видно было.
Ошибка? Это не ошибка, это системная функция.