RIA crumbs.

Blog about RIA development. ActionScript, JavaScript and more.

Mozilla vs SWF

8 comments

Всем столкнувшимся с проблемой передачи фокуса своему Flash/Flex приложению в Mozilla (FF) посвящается.

Недавно захотелось, чтобы приложение сходу, после запуска в браузере, без “стартового” клика по нему, “отлавливало” события мышиного колеса, к примеру.

В ходе детальных экспериментов и мучительных поисков, выяснилось, что в IE, как это ни странно, реализовать это очень просто. Достаточно просто-напросто при помощи JavaScript передать фокус вашей флешке, и все сразу счастливы:
[code lang="javascript"]
$("#MyFxApplication").focus();
[/code]
Но тут и вступает в игру FireFox, в котором фокус и события упорно игнорируют ваше приложение. На просторах Гугла и Яндекса нашлось много интересного, но все сводится к тому, что по-хорошему работать ничего не будет. Есть варианты, которые “лечат” эту болезнь у FireFox, но порождают болезни у Flex, отключение мультиселекта и fullscreen.

Такой вариант заключается в том, что приложению ставится wmode=”transparent” или wmode=”opaque”, а фокус передается тем же JavaScript, но с небольшим изменением, перед передачей фокуса приложению, даем его нашему body:
[code lang="javascript"]
$().focus();
$("#MyFxApplication").focus();
[/code]
Метод хорош, но мы теряем важные для большинства, как мне кажется, людей функциональности, причем fullscreen теряется как в IE, так и в FF.

Ответ Mozilla, по поводу этой проблемы, взято отсюда:

Mozilla hired a contractor to do the work, who stopped before finishing. Now
it’s too late in the release cycle to take the change, especially since there is
no one available and qualified to do the work.

I will push hard to get Mozilla Corporation to put someone on it after Firefox 3.

- Aaron

Есть варианты, где люди предлагают передавать события клавиатуры и мышки, в Flash/Flex через ExternalInterface. Чем-то это решение и хорошо, но при большом приложении можно немного затеряться при “расфасовке” входящих событий из JavaScript. И все равно остаётся проблема автофокуса.

Итого, будем ждать и надеяться, что в FireFox 3 все будет хорошо, и все им дружно будут пользоваться, или …

Но, есть еще метод от _etc, который предлагает зайти со стороны AS2. Главными идеями метода, являются:

  • Подписываться на глобальные события мыши, как в AS2, везде и всюду, в любом классе;
  • Не иметь привязки ни к какому InteractiveObject, необходимости наследования, отрисовки чего-либо;
  • Захват скролла мыши от браузера (в AS3 скролл продолжает работать в самом браузере).

Более подробно почитать и взять на вооружение этого решения можно здесь.

ps. Если кому удалось решить данную проблему, просьба поделится со страждущими :)

pss. В JavaScript примерах использовался синтаксис суперзамечательной библиотеки jQuery, о которой мне рассказал Майкл Клишин. За что ему большое человеческое спасибо.

Written by reijii

October 9th, 2007 at 12:41 am

Posted in Flex,Integration

8 Responses to 'Mozilla vs SWF'

Subscribe to comments with RSS or TrackBack to 'Mozilla vs SWF'.

  1. __etc

    9 Oct 07 at 12:43 pm

  2. Да читал, но немного не то, что хотелось бы :( Извини, что забыл указать ссылку на тебя, сейчас все исправим.

    reijii

    9 Oct 07 at 12:50 pm

  3. Ну может и не совсем то, но скролл захватывает и это главное =)

    __etc

    9 Oct 07 at 9:16 pm

  4. согласен. прием хороший, и один из немногих работающих, я даже его указал как решение проблем, но работает только для своих проектов, чужие флешки оборачивать не всегда получится. Да и к тому же автофокус все равно остаётся за кадром, а есть заказчики, которым нравится мигающий курсор в поле ввода :)

    Пост наверно был как о проблеме в глобальном, об автофокусе, и о том что mozilla не смогла по людски реализовать работу с embed.

    reijii

    9 Oct 07 at 9:46 pm

  5. Ну вообще говоря, у меня работал автофокус через focus().

    __etc

    10 Oct 07 at 2:22 pm

  6. Дай ссылку плз. На посмотреть.

    reijii

    10 Oct 07 at 2:29 pm

  7. Мммм, сейчас не работает =(
    Работало в версии 1.5

    __etc

    10 Oct 07 at 6:03 pm

  8. ага. (

    reijii

    10 Oct 07 at 6:31 pm

Leave a Reply