Как создать ссылку с текстом и вставить ее на рабочий стол телеграммы
Я пытаюсь создать кнопку «Копировать» для использования буфера обмена в разных приложениях.
Я ожидаю, что:
- ctrl+v в простом текстовом редакторе создаст простой текст
- ctrl+v в RTF (или в приложении с поддержкой «ссылки») создаст ссылку
Вот упрощенный пример кода:
const aElement = document.createElement('a');
aElement.href = 'https://stackoverflow.com/';
aElement.innerText = 'stackoverflow link';
const data = [
new ClipboardItem({
'text/plain': new Blob([aElement.innerText], {type: 'text/plain'}),
'text/html': new Blob([aElement.outerHTML], {type: 'text/html'}),
})
];
navigator.clipboard.write(data);
Пример отлично работает везде, кроме настольного приложения Telegram. Я перепробовал все известные мне варианты параметров Blob и ClipboardItem.
Также я пробовал копировать и вставлять ссылки, созданные на рабочем столе телеграммы, и они везде вставляются как ссылки! Структура, которую я вижу, когда копирую ссылку с рабочего стола телеграммы, похожа на мою
Вот упрощенный пример отладки:
document.body.onclick = () => window.navigator.clipboard.read()
.then(r => r[0])
.then(r => r.types.map(t => r.getType(t).then(b => b.text())))
.then(r => Promise.all(r))
.then(p => console.log(p))
Что я делаю не так?
1 ответ
Телеграм не вставляетсяtext/html
из буфера обмена в сообщения. Убедиться в этом можно, введя в сообщение любой html-код — оно будет прочитано как текст. В вашем случае лучшим вариантом было бы сделать что-то вроде этого: