Domanda

Sto creando un'estensione Firefox per scopi dimostrativi. Devo chiamare una specifica funzione JavaScript nel documento dall'estensione. L'ho scritto nel mio documento HTML (non all'interno dell'estensione, ma in una pagina caricata da Firefox):

document.funcToBeCalled = function() {
   // function body
};

Quindi l'estensione eseguirà questo in alcuni eventi:

var document = Application.activeWindow.activeTab.document;
document.funcToBeCalled();

Tuttavia genera un errore che dice che funcToBeCalled non è definito.

Nota: ho potuto ottenere un elemento sul documento chiamando document.getElementById(id);

È stato utile?

Soluzione

È per motivi di sicurezza che hai un accesso limitato alla pagina del contenuto dall'estensione. Vedi XPCNativeWrapper e Accesso sicuro al contenuto DOM da Chrome ,

Se controlli la pagina, il modo migliore per farlo è impostare un listener di eventi nella pagina e inviare un evento dalla tua estensione (addEventListener nella pagina, dispatchEvent nell'estensione).

Altrimenti, vedi http://groups.google.com/group /mozilla.dev.extensions/msg/bdf1de5fb305d365

Altri suggerimenti

document.wrappedJSObject.funcToBeCalled();

Questo è non sicuro e consente a una pagina malevola di elevare le sue autorizzazioni a quelle della tua estensione ... Ma fa quello che hai chiesto. Leggi all'inizio vulnerabilità di greasemonkey per il motivo per cui questa è una cattiva idea.

Ho un modo molto più semplice per farlo. Supponiamo di dover chiamare la funzione xyz () che è scritta sulla pagina. e devi chiamarlo dal tuo pluggin.

crea un pulsante (" rendilo invisibile. in modo da non disturbare la tua pagina "). al clic di quel pulsante chiama questa funzione xyz ().

<input type="button" id="testbutton" onclick="xyz()" />

ora in pluggin hai un oggetto documento per la pagina. supponiamo che sia mainDoc

dove vuoi chiamare xyz (), esegui questa linea

mainDoc.getElementById('testbutton').click();

chiamerà la funzione xyz ().

buona fortuna :)

Puoi farlo, ma devi avere il controllo sulla pagina ed essere in grado di aumentare il livello di privilegi per lo script. La documentazione di Mozilla fornisce un esempio - cerca " Privilege " nella pagina.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top