|
Нужна помощь в 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
|
остается один вариант, сунуть его куда-то так, чтобы не видно было.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |