“复制到剪贴板”的JavaScript代码在Internet Explorer 11中不起作用

时间:2019-05-09 15:46:13

标签: javascript dom internet-explorer-11

我有一段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 :(得分:0)

如果不是IE11,则可以使用ClipboardAPI,所以我只需要使用:

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

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

希望有帮助!

答案 1 :(得分:0)

在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浏览器,请检查this threadthis thread