2010-08-21 94 views
1

我正在構建一個safari擴展...我需要獲取一些設置,但是,消息是異步的,所以,如果我查詢全局頁面的某些設置,它不會馬上出現。 。我該如何解決這個問題?Safari擴展設置

全球頁面(該消息被注入的JS腳本接收)

<!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'); 

我需要在這裏下的代碼var oi ...但我不知道我怎麼能在那裏得到它,因爲它會默認,如果代碼被執行,因爲異步消息...

+0

感謝編輯代碼;)我仍然不習慣如何在這裏呈現代碼...... – dododedodonl 2010-08-21 13:58:35

+0

我改變了我的腳本在inject.js中的工作方式,它在收到消息時調用函數。 .. – dododedodonl 2010-08-21 22:39:26

回答

0

你不會說你想做什麼,但你是對的米消息是異步的。如果你所做的不能直接在全局頁面中完成,你可以使用專門的canLoad消息。這當然是一種黑客攻擊,除非你正在檢查是否可以加載,但我已經使用了它幾次,而且效率很高。