Сообщение от arkadii_parovozov
|
Как я понял js не имеет доступа к буферу клиента
|
Для этого есть
Clipboard API, а вам нужен метод — navigator.clipboard.writeText (для поддержки Safari я вам рекомендую использовать polyfill)
Сообщение от arkadii_parovozov
|
но при копировании, браузер кодирует кириллицу в ссылке и в итоге получаем это
|
Всё правильно, в URL кодируются многие символы, чтобы адрес ссылки мог быть представим в разных контекстах. Это полностью рабочий адрес ссылки.
В JS link.href возвращает URI независимо от того, как в разметке представлен атрибут href — как URI, или как
IRI (т. е. в данном примере —
https://xn--80aswg.xn--p1ai/%D0%BA%D...BB%D0%BE%D0%B3)
Если у вас в разметке адрес представлен в атрибуте href как IRI, то вам достаточно его прочитать и записать в буфер обмена. В примере нажатие на кнопку запускает процесс копирования...
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.8.6/clipboard-polyfill.js"></script>
<a id="link" href="https://сайт.рф/каталог">сайт.рф/каталог</a>
<script>
const button = document.createElement("button");
button.textContent = "Копировать адрес ссылки";
button.addEventListener("click", event => {
const iri = document.querySelector("a#link").getAttribute("href");
clipboard.writeText(iri).then(() => {
alert('Ccылка скопирована! ' + iri);
});
});
document.body.appendChild(button);
</script>
Если же у вас в разметке адрес представлен в атрибуте href как URI, то вам нужна сторонняя библиотека для того, чтобы перевести URI в
IRI.
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard-polyfill/2.8.6/clipboard-polyfill.js"></script>
<script src="https://unpkg.com/uri-js@4.2.2/dist/es5/uri.all.min.js"></script>
<a id="link" href="https://xn--80aswg.xn--p1ai/%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3">сайт.рф/каталог</a>
<script>
const button = document.createElement("button");
button.textContent = "Копировать адрес ссылки";
button.addEventListener("click", event => {
const iri = URI.serialize(URI.parse(document.querySelector("a#link").href), { iri: true });
clipboard.writeText(iri).then(() => {
alert('Ccылка скопирована! ' + iri);
});
});
document.body.appendChild(button);
</script>
Если вы не уверены, что у вас используется в атрибуте href (URI или
IRI), то я вам рекомендую использовать последний пример. Сторонний код вы можете скачать к себе в проект.
Сообщение от MC-XOBAHCK
|
Используйте латиницу для урлов, а лучше вообще смените домен на .ru или другую зону на латинице.
|
Все браузеры уже давно поддерживают
IRI, если только речь не о старых (ну о реально старых) браузерах!