2010-06-16 13 views
5

Sto provando a codificare un'estensione safari simile a Bubble Translate per Chrome.Estensione Safari - Troppi script immessi che rispondono al messaggio

quando si fa clic su un pulsante sulla barra degli strumenti, automaticamente viene convertito il testo attualmente selezionato nella lingua desiderata utilizzando l'API della lingua di Google.

Io uso il seguente script iniettato per ottenere il testo evidenziato e visualizzare il risultato (come un avviso per il momento): http://pastebin.com/bYVuQAmp

Io uso il seguente script globale per chiamare lo script iniettato se neccessary: ​​hxxp: //pastebin.com/VHaAKM5a

il problema che ho è la seguente:

lo script non significa solo ottenere iniettato nella pagina principale, ma anche in annunci e roba simile che è incorporato nella pagina. A causa di ciò, il testo selezionato viene tradotto più volte poiché tutti gli script incorporati in una pagina rispondono al messaggio.

Come posso essere sicuro che lo script sia iniettato solo nella pagina giusta o solo la pagina giusta risponda?

Grazie,

Philipp

risposta

1

Forse potreste controllare che la pagina in cui viene iniettato lo script non è all'interno di una cornice:

if (window == window.parent) { /* you're not inside a frame! */ } 

non sono sicuro se funziona dai tag interni <object> che incorporano l'HTML. Le probabilità sono che sì.

3

Quando lo script globale risponde al messaggio dallo script iniettato, includere l'URL della scheda di destinazione nel messaggio di risposta, in questo modo:

var message = { 
    translation: result.translation, 
    url: event.target.url 
} 
event.target.page.dispatchMessage("displayTranslation", message); 

Poi, nel gestore di messaggi dello script iniettato, verificare che l'URL passato nel messaggio corrisponde l'URL della pagina, in questo modo:

if (event.name === "displayTranslation" && 
    event.message.url === window.location.href) { 
    alert(event.message.translation); 
} 

in questo modo, solo lo script nel frame che ha originato la richiesta agirà sulla risposta.

Problemi correlati