开发者

Safari extension settings

开发者 https://www.devze.com 2023-01-12 18:40 出处:网络
I\'m building a safari extension... I need to get some settings, but, messages are asynchronous, so, if I query the global page for some settings, it isn\'t there right away... How can I solve this??

I'm building a safari extension... I need to get some settings, but, messages are asynchronous, so, if I query the global page for some settings, it isn't there right away... How can I solve this??

Global page (the message is received by the injected JS script)

    <!DOCTYPE HTML>
    <html>
  <script language="javascript">
 开发者_StackOverflow中文版 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');

I need var oi in code under here... But I don't know how I can get it there, because it will be default if the code is executed, because of asynchronous messages...


You don't say much about what you're trying to do, but you're right that messages are asynchronous. If what you're doing can't be done directly in the global page, you can use the specialized canLoad message. It's kind of a hack unless, of course, you're actually checking to see whether something can load, but I've used it a few times rather effectively.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号