2010-07-06 9 views
3

J'ai donc copié le code de l'exemple suivant sur le site Apple Developer.Extension Safari exécutant javascript injecté plusieurs fois

http://developer.apple.com/safari/library/documentation/Tools/Conceptual/SafariExtensionGuide/MessagesandProxies/MessagesandProxies.html#//apple_ref/doc/uid/TP40009977-CH14-SW1

Quand je lance l'extension, il fonctionne normalement, sauf le script injecté est exécuté 3 fois que la sortie à écrire à console.log 3 fois. J'ai également mis une alerte dans la fonction doBigCalc et il a ouvert 3 alertes.

Pourquoi cela se produit-il/est-ce censé se produire?

Répondre

5

Vous ne parlez pas de votre implémentation, mais il se peut que votre code ne soit pas le problème. La clé est de comprendre que un script injecté est chargé .... A partir de la injected script documentation:

Les scripts sont injectés dans la page de haut niveau et les enfants avec des sources HTML, comme les iframes. Ne supposez pas qu'il n'y a qu'une seule instance de votre script par onglet du navigateur.

+3

Je viens de lire ça. Je viens d'ajouter if (window.top === fenêtre) et il l'a corrigé. –

1

La documentation mentionne que vous pouvez envoyer des messages à l'aide des gestionnaires d'événements sur trois niveaux différents:

safari.application.activeBrowserWindow.activeTab.addEventListener("message", waitForMessage, false); 

safari.application.activeBrowserWindow.addEventListener("message", waitForMessage, false); 

safari.application.addEventListener("message", waitForMessage, false); 

Mais vous devez choisir l'un des trois. Vous n'attachez pas les écouteurs d'événement à tous les trois êtes-vous? Si vous êtes, vous l'obtiendrez trois fois à coup sûr.