Я хочу скопировать часть HTML-страницы в буфер обмена и сохранить форматирование.
Я нашел решение, основанное на execCommand API (то есть document.execCommand("copy")
), и оно должно работать во всех основных браузерах в соответствии с документация разработчика mozilla и caniuse.com , так что даже Safari 10+ должен поддерживать это.
См. пример ниже, который работает в Chrome v.68, Firefoxv.61, Edge v.42, но не в последнем Safari 11.1.2 (13605.3.8):
https://jsfiddle.net/andreyprokhorov/xpvt214o/773246/
Есть много jsбиблиотеки (например: https://clipboardjs.com),, но большинство решений основаны на API execCommand (уже пробуют здесь) или на выборе - т.е. создают невидимую область текста, это работает в Safari, но я теряю форматирование.
Кто знает, можно ли это сделать в Safari?
<div id="data">
<b>Example HTML data</b>
</div>
<button>Save to clipboard</button>
$(function() {
function copyToClipboard(data) {
function listener(e) {
e.clipboardData.setData("text/html", data);
e.clipboardData.setData("text/plain", data);
e.preventDefault();
}
document.addEventListener("copy", listener);
document.execCommand("copy");
document.removeEventListener("copy", listener);
};
function copyHtmlToClipboard() {
var data = document.getElementById("data").innerHTML;
copyToClipboard(data);
};
var button = $("button")
button.on("click", copyHtmlToClipboard)
});