primo commit
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
/* 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 */ }
|
||||
})();
|
||||
Reference in New Issue
Block a user