diff --git a/src/ui.tsx b/src/ui.tsx index 2f5f5d7..40ba797 100644 --- a/src/ui.tsx +++ b/src/ui.tsx @@ -89,6 +89,8 @@ function Plugin () { } // Копирует все debug-значения (RAW + расчёт) в буфер обмена как текст. + // Важно: в iframe плагина Figma navigator.clipboard часто недоступен (или его + // промис тихо reject'ится), поэтому обязателен fallback через document.execCommand('copy'). function copyInfo () { if (windowInfo == null) return const i = windowInfo @@ -110,11 +112,46 @@ function Plugin () { `center.y = ${i.center.y} (y + h / 2)` ] const text = lines.join('\n') + + function markCopied () { + setCopied(true) + setTimeout(function () { setCopied(false) }, 1200) + } + + // Путь 1: современный async Clipboard API (если доступен и сработал) if (navigator.clipboard != null && navigator.clipboard.writeText != null) { - navigator.clipboard.writeText(text).then(function () { - setCopied(true) - setTimeout(function () { setCopied(false) }, 1200) - }).catch(function () { /* тихо */ }) + const apiResult = navigator.clipboard.writeText(text) + if (apiResult != null && typeof apiResult.then === 'function') { + apiResult.then(function () { markCopied() }).catch(function () { + // тихо — переходим к fallback + fallbackCopy(text, markCopied) + }) + return + } + } + // Путь 2: синхронный fallback для iframe/небезопасных контекстов + fallbackCopy(text, markCopied) + } + + // Fallback-копирование через временный