通过Javascript将换行符复制到剪贴板

3

在任何人提问之前,我已经彻底研究过了,并且之前没有发布过答案。

我想用Javascript将一些纯文本配置文本发送到剪贴板。文本将由多个命令组成,每行一个命令,以便用户可以使用文本编辑器(最常见的是Notepad.exe)将其粘贴到计算机上的配置文件(称为“myconfig.ini”)中。

我尝试了以下方法:

var cCRLF = String.fromCharCode(10,13);

var cText  = 'This is command line 1'+cCRLF;
cText  += 'This is command line 2'+cCRLF;
cText  += 'This is command line 3'+cCRLF;
cText  += 'This is command line 4';

window.clipboardData.setData('Text', cText);

但是当我执行并粘贴到记事本中时,
我没有得到单独的行,
换行符(cCRLF)也无法查看
(那个讨厌的小方框字符出现了)。

有人有解决办法吗?

3个回答

3
解决方案是使用反引号(` `)。
alert(`string text line 1
string text line 2`);

参考资料: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/template_strings

模板字符串是一种新的字符串语法,允许你在字符串中插入表达式。这些表达式被包含在`${}`中,并可以引用任何JavaScript表达式,包括变量、函数调用和算术运算符。模板字符串可以跨越多行,而不需要使用反斜杠来转义换行符。


不幸的是,window.clipboardData.setData() 只在 IE 中有效,而 IE 几乎是唯一不支持这种反引号符号的浏览器。 - Ivar

0

我想我找到了一个解决方案。虽然有点奇怪,但是嘿,这是为IE而设计的。这是我在stackoverflow上找到的修改过的片段。

<body>
    <a href="#" onclick='test("This\nIS\nA\nTEST")'>TEST</a>
    <div id="cb" style="position: absolute; left: -2000px"></div>
</body>
<script>

function test(cText) {
    cText= cText.replace(/\n\r?/g, "<br>");

    // create an editable DIV and append the HTML content you want copied
    var editableDiv = document.getElementById("cb");
    with (editableDiv) {
        contentEditable = true;
    }     
    editableDiv.innerHTML= cText;          

    // select the editable content and copy it to the clipboard
    var r = document.body.createTextRange();
    r.moveToElementText(editableDiv);
    r.select();  
    r.execCommand("Copy");

    // deselect, so the browser doesn't leave the element visibly selected
    r.moveToElementText(document.body);
    r.select();
}

</script>

0

好的,谢谢大家。我想我会选择CSS弹出路线。我同意,这是一个更清晰的解决方案。 - user478094
user478094,您考虑选择一个答案,这样您的问题就会被标记为已解决了吗?谢谢。 - kanaka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接