我需要制作一个在每个页面和浏览器上都可以使用的按钮,该按钮可以从文本区域复制输入。我正在尝试通过以下功能做到这一点:

 selectElementContents: function(){
      el = document.getElementById("tag_text");

      var range = document.createRange();
      range.selectNode(el);
      window.getSelection().removeAllRanges();
      window.getSelection().addRange(range);

      try {
        var successful = document.execCommand('copy');
      } catch(err) {
        console.log('Oops, unable to copy');
      }


目前,该功能在除Firefox和Safari之外的所有浏览器上均能正常运行。我读了一些有关Safari的文章,似乎它不支持这种功能,还是我弄错了?但是,当我尝试使用document.execCommand('copy')复制输入内容时,会引发以下错误:[Exception... "Failure" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: debugger eval code :: <TOP_LEVEL> :: line 1" data: no]。我查了一下这个错误,它是一种通用的,因为代码包含了多个错误提示。

最后,我的问题是如何使它在firefox上运行,这是什么问题?

最佳答案

不幸的是,并非到处都支持execCommand('copy')。这也不是很安全,因为它会将内容放入剪贴板而不会提醒用户。

无论如何,对于不支持的浏览器,您都可以将execCommand('copy')与此answer中提供的解决方案结合使用,例如:

HTML:

<form id="test_form">
  <p>Copy this:</p>
  <input id="tag_text" type="text" size="40" />
  <input type="button" onClick="select_element_contents()" value="Copy" />
</form>


Javascript:

function select_element_contents (){
    var el = document.getElementById("tag_text");
    var el_text = el.value;

    var range = document.createRange();
    range.selectNode(el);
    window.getSelection().removeAllRanges();
    window.getSelection().addRange(range);

    try {
        var successful = document.execCommand('copy');
    } catch(err) {
        window.prompt("Copy to clipboard: Ctrl+C/Cmd+C, Enter", el_text);
    }
}


当然,这并不理想,但是由于Mozilla Firefox不支持自动复制到剪贴板,因此用户必须按下按钮。最好使其尽可能透明。

关于javascript - 在Mozilla FireFox中复制到剪贴板的纯JavaScript函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34067806/

10-16 21:04