Синхронная передача сообщений в расширении Safari - PullRequest
3 голосов
/ 12 июля 2010

Я работаю над расширением сафари, и мне было интересно, есть ли способ сделать синхронную передачу сообщений в расширении сафари.

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

Ответы [ 2 ]

4 голосов
/ 13 июля 2010

Вы можете использовать «специальное» сообщение 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 можно прочитать в руководстве по разработке.

0 голосов
/ 24 июля 2010

Кто-то задавал тот же вопрос на форуме разработчиков Safari. Короче говоря, вы не можете. (Кроме того, по моему скромному мнению, функция canLoad просто глупая.)

Однако вы можете использовать крышки, чтобы сделать их максимально безболезненными.

...