2010-06-16 3 views
5

J'essaye de coder une extension safari similaire à Bubble Translate for Chrome. Lorsque vous cliquez sur un bouton dans la barre d'outils, le texte en cours de traduction est automatiquement traduit dans la langue de votre choix à l'aide de l'API de langue Google.Extension Safari - Trop de scripts injectés répondant au message

J'utilise le script injecté suivant pour obtenir le texte en surbrillance et afficher le résultat (comme une alerte pour l'instant): http://pastebin.com/bYVuQAmp

J'utilise le script global suivant pour appeler le script injecté Si nécessaire: hxxp: //pastebin.com/VHaAKM5a

le problème que j'ai est le suivant:

le script ne sont pas simplement injecté dans la page principale, mais aussi dans les annonces et d'autres choses semblables qui est intégré dans la page. Pour cette raison, le texte sélectionné est traduit plusieurs fois car tous les scripts incorporés dans une page répondent au message.

Comment puis-je m'assurer que le script est injecté uniquement dans la bonne page ou que seule la bonne page répond?

Merci,

Philipp

Répondre

1

Peut-être que vous pouvez vérifier que la page dans laquelle est injecté le script n'est pas dans un cadre:

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

Je ne sais pas si cela fonctionne à partir de l'intérieur <object> balises intégrant HTML si. Les chances sont que oui.

3

Lorsque le script global répond au message du script injecté, comprennent l'URL de l'onglet cible dans le message de réponse, comme ceci:

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

Ensuite, dans le gestionnaire de messages du script injecté, vérifiez que l'URL passé dans le message correspond à l'URL de la page, comme ceci:

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

de cette façon, seul le script dans le cadre qui a pris naissance la demande va agir sur la réponse.

Questions connexes