diff --git a/app/templates/v2/screens/antrag_detail.html b/app/templates/v2/screens/antrag_detail.html index 3e25955..01c2550 100644 --- a/app/templates/v2/screens/antrag_detail.html +++ b/app/templates/v2/screens/antrag_detail.html @@ -914,7 +914,12 @@ window.v2ShowMatrixFieldInfo = function(field) { if (!win) v2ShareToast('Bitte Pop-up-Blocker prüfen — LinkedIn-Tab konnte nicht geöffnet werden.'); return; } - var text = buildShareText(platform) + '\n' + PERMALINK; + // NFC-Normalisierung: typografische Anführungszeichen + Umlaute werden + // mancherorts als zerlegte Codepoints (z.B. "a" + Combining Diaeresis) + // angeliefert. Threads' Composer rendert die zerlegten Formen als + // Rauten / ?#. NFC vereinigt sie zu "ä". + var rawText = buildShareText(platform) + '\n' + PERMALINK; + var text = rawText.normalize ? rawText.normalize('NFC') : rawText; var urls = { threads: 'https://www.threads.net/intent/post?text=' + encodeURIComponent(text), }; @@ -993,8 +998,20 @@ window.v2ShowMatrixFieldInfo = function(field) { var safeDrs = (DRS || 'antrag').replace(/[^a-zA-Z0-9_-]/g, '-'); var filename = 'gwoe-' + safeDrs + '.png'; - // Pfad A — Web-Share mit Datei (nur Mobile) - if (navigator.canShare && navigator.share) { + // Pfad A — Web-Share mit Datei nur auf Mobile, weil der OS-Share-Sheet + // unter macOS Safari/Chrome eine schlechte UX liefert (Instagram-App + // ist nicht installiert auf Desktop, das Sheet zeigt nur AirDrop, Mail + // und Notizen). Mobile-Detection per User-Agent und maxTouchPoints — + // eine reine Touch-Erkennung würde Hybrid-Geräte falsch klassifizieren. + var isMobile = (function () { + var ua = navigator.userAgent || ''; + if (/Android|iPhone|iPad|iPod|Mobile/i.test(ua)) return true; + // iPad iOS 13+ tarnt sich als macOS — Touch-Support als Hint. + if (/Macintosh/.test(ua) && navigator.maxTouchPoints > 1) return true; + return false; + })(); + + if (isMobile && navigator.canShare && navigator.share) { try { var resp = await fetch(url); if (resp.ok) {