3

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

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

4

2 回答 2

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消息的更多信息。

于 2010-07-12T21:29:27.060 回答
0

Safari 开发者论坛上也有人问过同样的问题。简而言之,你不能。(此外,以我的拙见,该canLoad功能纯粹是愚蠢的。)

但是,您可以使用闭包使其尽可能轻松。

于 2010-07-24T05:12:18.460 回答