#javascript #google-chrome #clipboard #execcommand
#javascript #google-chrome #буфер обмена #execcommand
Вопрос:
Я пытаюсь скопировать тег привязки в виде HTML с веб-страницы, используя JS. Идея состоит в том, чтобы позволить пользователям копировать элемент привязки и вставлять его в документы Word в качестве тега привязки.
HTML-код
<div id="dummyDiv" style="position: fixed; opacity: 0;">
<a href="http://localhost/Test">Link to Test</a>
</div>
JS-код
var range = document.createRange();
var selection = window.getSelection();
range.selectNodeContents(document.getElementById('dummyDiv'));
selection.removeAllRanges();
selection.addRange( range );
document.execCommand('copy');
Проблема, с которой я сталкиваюсь, заключается в том, что этот скрипт не копирует его как элемент привязки. Он копирует только внутренний текст тега привязки «Ссылка на тест». Я не уверен, как это сделать. Нужна некоторая помощь в этом.
Проблема, похоже, в среде разработки, которая находится на виртуальной машине. тот же код, приведенный выше, отлично работает вне виртуальной машины в Chrome той же версии. Странно, почему это не работает в виртуальной машине…
Ответ №1:
Я использую https://clipboardjs.com / для этого.
Особенность манипулирования буфером обмена в том, что оно работает только из пользовательского события (например, щелчок). Вне такого обработчика событий он просто не поместит его в буфер обмена.
Это мой код копирования, который я использую при событии нажатия кнопки
clipboard.copy({
'text/plain':'text',
'text/html': '<strong>text</strong>'
}).then(
function(){
alert("copied to clipboard");
},
function(err){
window.prompt("Something went wrong with automatically copying the data to clipboard.nPlease press CTRC C to copy the data",'text');
});
Комментарии:
1. Это круто. Я проверил это, и это сработало как по волшебству. Но скрипт запрашивает доступ в Internet Explorer … и в некоторых случаях он запрашивает разрешение activex. Есть идеи, как производится выбор для браузера Chrome? Я вижу, что они используют скрипт с именем «select» для выбора узла .. просматривая его сейчас. Спасибо за помощь, Tschallcka
2. ну, вы взаимодействуете с конфиденциальной частью данных пользовательского пространства. Я бы хотел, чтобы больше браузеров запрашивали разрешение. Как это работает под капотом? не совсем уверен, у него есть множество резервных вариантов, поэтому он всегда будет пытаться работать.
3. <!DOCTYPE html> <html> <head> <script src=» cdn.jsdelivr.net/clipboard.js/1.5.13 /… > </head> <body> <div id=»bar»><a href=» Link» rel=»nofollow noreferrer»> localhost/Testasd»>Ссылка на тест</a></div> <button class=»btn» data-clipboard-target=»#bar»> Вырезать в буфер обмена </button> <script> var clipboard = новый буфер обмена(‘.btn’); clipboard.on(‘успех’, функция (e) { e.clearSelection(); }); </script> </body> </html>
4. Вы правы насчет разрешения: D но иногда пользователи ищут более простой способ выполнения действий, и в конечном итоге мы ищем хитрости!!
5. Эй, похоже, проблема была только в моей среде разработки: ( Я не могу выяснить причину, но тот же код, который я вставил в свой вопрос, отлично работает в Chrome вне моей среды виртуальной машины разработчика. PS: версия Chrome также такая же: D