Safari扩展中的同步消息传递

时间:2010-07-12 16:56:19

标签: javascript safari safari-extension

我正在进行Safari扩展,我想知道是否有办法在Safari扩展中进行同步消息传递。

我想从我注入的javascript向全局页面发送一条消息,注入的javascript等待返回结果。必须将我的代码拆分为另一个从全局页面接收消息的函数,这似乎过于复杂。

2 个答案:

答案 0 :(得分:4)

您可以使用“特殊”canLoad消息。从技术上讲,它旨在发送消息并返回与页面上的元素是否可以加载相关的值,但它实际上只是一个同步消息,由全局HTML页面以与其他任何方式相同的方式回答。您只需查找名为'canLoad'的消息,而不是传递自定义消息名称:

// injected script
var myVar = safari.self.tab.canLoad( event );

// global HTML file
<!DOCTYPE html>

<script type="text/javascript" charset="utf-8">
  safari.application.addEventListener( 'message', listen, true );

  function listen( msgEvent ) {
    switch( msgEvent.name ) {
      case 'canLoad':
        msgEvent.message = 'My return value';
        break;
    }
  }
</script>

您可以在开发指南中详细了解 canLoad 消息。

答案 1 :(得分:0)