Показать сообщение отдельно
  #5 (permalink)  
Старый 22.04.2020, 20:32
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от 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, если только речь не о старых (ну о реально старых) браузерах!

Последний раз редактировалось Malleys, 22.04.2020 в 20:48.
Ответить с цитированием