Настройки расширения 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 в коде здесь ... Но я не знаю, как мне его там получить, потому что он будет по умолчанию, если код будет выполнен, из-за асинхронных сообщений ...


person dododedodonl    schedule 21.08.2010    source источник
comment
спасибо за правку кода;) Я до сих пор не привык к тому, как здесь представлен код ...   -  person dododedodonl    schedule 21.08.2010
comment
Я изменил способ работы моего скрипта в injected.js, он вызывает функцию при получении сообщения ...   -  person dododedodonl    schedule 22.08.2010


Ответы (1)


Вы мало говорите о том, что пытаетесь сделать, но вы правы в том, что сообщения асинхронны. Если то, что вы делаете, не может быть выполнено непосредственно на глобальной странице, вы можете использовать специальное сообщение canLoad. Это своего рода взлом, если, конечно, вы на самом деле не проверяете, может ли что-то загружаться, но я использовал его несколько раз довольно эффективно.

person Rob Wilkerson    schedule 21.08.2010