Код Javascript для «Копировать в буфер обмена» не будет работать в Internet Explorer 11 - PullRequest
0 голосов
/ 09 мая 2019

У меня есть фрагмент кода Javascript, который в настоящее время выполняет вызов определенной веб-страницы, возвращает данные, а затем копирует их в буфер обмена. Он работает в Chrome, Safari и Firefox, но по какой-то причине функция копирования не будет работать в IE 11.

Тело ответа возвращается с правильными данными, но я не могу передать эти данные в буфер обмена. Код должен быть чистым Javascript, так как он используется через портал для разработчиков с некоторыми ограничениями. По сути, Я хочу избежать импорта библиотек jQuery / использования jQuery .

function httpGet(theUrl)
{
   if (window.XMLHttpRequest)
   {// code for IE7+, Firefox, Chrome, Opera, Safari
       xmlhttp=new XMLHttpRequest();
   }
   else
   {// code for IE6, IE5
       xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
   xmlhttp.onreadystatechange=function()
   {
       if (xmlhttp.readyState==4 && xmlhttp.status==200)
       {
           function listener(e) {
             e.clipboardData.setData("text/html", xmlhttp.responseText);
             e.clipboardData.setData("text/plain", xmlhttp.responseText);
             e.preventDefault();
           }
           document.addEventListener("copy", listener);
           document.execCommand("copy");
           document.removeEventListener("copy", listener);

           return xmlhttp.responseText;
       }
   }
   xmlhttp.open("GET", theUrl, false );
   xmlhttp.send();
}

Функция вызывается в событии "onclick" HTML, которое обычно запускается из того, что я понимаю (учитывая, что выполняется вызов страницы "theUrl" и возвращаются данные). Любая информация о том, почему буфер обмена не получает данные, будет принята с благодарностью. Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

В браузере IE вы можете использовать следующий код:

<script>
    function Copy() {
        if (window.clipboardData) {
            window.clipboardData.clearData();
            window.clipboardData.setData("Text", document.getElementById('txtacpy').value);
        }
        else {
            alert("not support window.cliboardData")
        }
    }
    function paste() {
        if (window.clipboardData) {
            document.getElementById('txtapaste').value = window.clipboardData.getData("Text");
        }
    }
</script>
<input type="button" id="btncopy" value="Copy" onclick="Copy()" />
<br />
<input type="text" name="txtacpy" id="txtacpy" />
<br />
<input type="button" id="btncopy" value="Paste" onclick="paste();" />
<br />
<input type="text" name="txtapaste" id="txtapaste" />

результат, подобный this .

Примечание. Приведенный выше код хорошо работает только вБраузер IE, поэтому вам может понадобиться сначала проверить, является ли браузер браузером IE, проверьте эту ветку и эту ветку .

0 голосов
/ 09 мая 2019

Если бы не IE11, вы могли бы использовать ClipboardAPI , поэтому я бы просто использовал:

function copy() {
  const copyText = document.querySelector("#input");
  copyText.select();
  document.execCommand("copy");
}

document.querySelector("#copy").addEventListener("click", copy);

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...