/* OGame Spy Auto-Importer — script MAIN world (iniettato nella pagina) * * Ruolo: intercettare il testo che la pagina OGame COPIA negli appunti, * senza mai doverli leggere. Questo evita del tutto il problema dei permessi * clipboard nei content script (dove `navigator.clipboard.readText()` è * soggetta ai permessi della pagina e viene rifiutata → auto-import muto). * * Copre due strade: * 1) navigator.clipboard.writeText() → pulsante "API"/"Copia" di OGame * 2) l'evento DOM 'copy' → Ctrl+C / tasto destro / execCommand * (quest'ultimo è gestito direttamente da content.js, in isolated world) * * Gira a document_start per agganciare writeText prima degli script di gioco. */ (function () { 'use strict'; const CHANNEL = 'ogame-spy-importer'; let hooked = false; function share(text) { if (!text || typeof text !== 'string') return; try { window.postMessage({ __ogameSpyImporter: CHANNEL, text: text }, '*'); } catch (_) { /* noop */ } } function hookWriteText(target) { if (!target || typeof target.writeText !== 'function' || target.writeText.__spyHooked) return false; const orig = target.writeText; const wrapper = function (text) { share(text); return orig.apply(this, arguments); }; try { wrapper.__spyHooked = true; target.writeText = wrapper; return true; } catch (_) { // proprietà non scrivibile: prova a definire una own property try { Object.defineProperty(target, 'writeText', { configurable: true, writable: true, value: wrapper, }); return true; } catch (_) { return false; } } } try { // Istanza (shadows il prototipo) + prototipo, per essere sicuri. hooked = hookWriteText(navigator.clipboard) || hooked; if (window.Clipboard && Clipboard.prototype) { hooked = hookWriteText(Clipboard.prototype) || hooked; } } catch (_) { /* noop */ } })();