2010-08-21 2 views
1

Je construis une extension de safari ... J'ai besoin de quelques paramètres, mais, les messages sont asynchrones, donc, si j'interroge la page globale pour certains paramètres, elle n'est pas là tout de suite .. . Comment puis-je resoudre ceci??Paramètres d'extension Safari

page Global (le message est reçu par le script JS injecté) dans le code sous ici

<!DOCTYPE HTML> 
    <html> 
    <script language="javascript"> 
    function messageHandler(event) { 
    var activeTab = event.target.browserWindow.activeTab 
    if (event.name === "getSettings") { 
    activeTab.page.dispatchMessage("returnedSettings", safari.extension.settings[event.message]); 
    } else if(event.name === 'openNewTab') { 
    safari.application.activeBrowserWindow.openTab().url = event.message; 
    activeTab.page.dispatchMessage("focus"); 
    } else if(event.name === 'openNewVenster') { 
    safari.application.openBrowserWindow().activeTab.url = event.message; 
    //activeTab.page.dispatchMessage("focus"); 
    } 
    } 

    safari.application.addEventListener("message", messageHandler, false); 
    </script> 
</head> 
    </html> 

main.js

 var oi = 'tab'; 
    // Message Event Handler 
    function handleMessage(e) { 
    if(e.name == 'returnedSettings') { 
    oi = e.message; 
    } else if(e.name == 'focus') { 
    window.focus(); 
    } 
    } 

    // Message Event Listener 
    safari.self.addEventListener('message', handleMessage, false); 
    safari.self.tab.dispatchMessage('getSettings', 'open'); 

Je dois var oi ... Mais je ne sais pas comment je peux l'obtenir là-bas, parce que ce sera par défaut si le code est exécuté, à cause des messages asynchrones ...

+0

Merci pour l'édition du code;) Je ne suis toujours pas habitué à la manière dont le code est présenté ici ... – dododedodonl

+0

J'ai changé la façon dont mon script dans le fichier injectected.js fonctionne, il appelle une fonction lorsque le message est reçu. .. – dododedodonl

Répondre

0

Vous ne dites pas grand chose de ce que vous essayez de faire, mais vous avez raison m Les essages sont asynchrones. Si ce que vous faites ne peut pas être fait directement dans la page globale, vous pouvez utiliser le message spécialisé canLoad. C'est un peu un hack à moins, bien sûr, que vous vérifiiez pour voir si quelque chose peut charger, mais je l'ai utilisé quelques fois plutôt efficacement.