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