2010-08-21 118 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消息。这当然是一种黑客攻击,除非你正在检查是否可以加载,但我已经使用了它几次,而且效率很高。