Скопировать тег привязки с HTML-страницы в буфер обмена с помощью Java Script в браузере Chrome

#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