【发布时间】:2016-03-24 08:52:43
【问题描述】:
考虑以下jsfiddle,用户可以单击包含粗体文本的 div,然后执行复制 (ctrl+c win cmd+c mac) 将 html 作为 HTML 复制到剪贴板。如果您随后粘贴到例如 gmail 中,您将获得 html 格式。
'copyHtmlToClipboard' 函数基本上会创建一个隐藏的 div,将 html 复制到其中,使用 document.createRange 选择它,然后调用 document.execCommand('copy')
function copyHtmlToClipboard(html) {
var div = document.createElement("div");
div.style.opacity = 0;
div.style.position = "absolute";
div.style.pointerEvents = "none";
div.style.zIndex = -1;
div.setAttribute('tabindex', '-1'); // so it can be focused
div.innerHTML = html;
document.body.appendChild(div);
var focused=document.activeElement;
div.focus();
window.getSelection().removeAllRanges();
var range = document.createRange();
// not using range.selectNode(div) as that makes chrome add an extra <br>
range.setStartBefore(div.firstChild);
range.setEndAfter(div.lastChild);
//range.selectNode(div);
window.getSelection().addRange(range);
var ok=false;
try {
ok = document.execCommand('copy');
} catch (err) {
console.log(err);
}
if (!ok) console.log('execCommand failed!');
window.getSelection().removeAllRanges();
document.body.removeChild(div);
focused.focus();
}
在 Windows Chrome/Firefox 上,这可以正常工作。
但是在 Mac 上 Chrome execCommand 返回 false。
如何让这段代码在 Mac 上运行?
谢谢!
【问题讨论】:
标签: javascript html macos ecmascript-6 execcommand