Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Настройки расширения Safari

Автор вопроса: dododedodonlОтветов: 1

Я создаю расширение сафари ... Мне нужно получить некоторые настройки, но сообщения асинхронны, поэтому, если я запрашиваю глобальную страницу для некоторых настроек, их сразу нет ... Как я могу решить эту проблему ??

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

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

jquerymessagesafari-extension

Ответы

Ответ 1 · Rob Wilkerson

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы