флэш-память, блокирующая события JavaScript

это - редактирование исходного сообщения теперь, когда я лучше понимаю проблему. теперь с исходным кодом!

В IE, если тело (или другое отделение HTML фокусируется), то Вы нажатие клавиши и нажимаете на флэш-память одновременно, затем выпускают... keyup событие, никогда не запускается. Это не запущено в JavaScript или во флэш-память. Где это keyup событие?

Это - порядок события, увольняющего Вас, добираются вместо этого:

  1. javascriptKeyEvent: bodyDn ** currentFocusedElement: тело
  2. javascriptKeyEvent: docDn ** currentFocusedElement: тело
  3. actionScriptEvent: активируйтесь ** currentFocusedElement: [объект]
  4. actionScriptEvent: mouseDown ** currentFocusedElement: [объект]
  5. actionScriptEvent: mouseUp ** currentFocusedElement: [объект]

Последующий keydown и keyup события получены флэш-памятью, но что начальная буква keyUp никогда не запускается.. где угодно. И мне нужно это keyup!

Что не работает:

  • проверка, возрос ли ключ без слушателя. Проверьте, снижается ли ключ?
  • wmode, непрозрачный или прямой. Хотя с непрозрачным намного более трудно воспроизвести.
  • продвижение фокуса назад к JavaScript как можно скорее для ловли событие. (попробованный это слушателем размытости в JavaScript и устанавливающий фокус, когда as3 активируется.)
  • никакой jQuery или прототип не получают пропавших без вести keyup
  • и статическая и динамическая публикация swfobject

Вот html/javascript:




    
     

    




clear

Вот код as3:

package
{

import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.external.ExternalInterface;

public class tmpa extends Sprite
{

public function tmpa( ):void
{
    extInt("flashInit");
    stage.align = StageAlign.TOP_LEFT;
    stage.scaleMode = StageScaleMode.NO_SCALE;
    stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDnCb, false, 0, true );
    stage.addEventListener( KeyboardEvent.KEY_UP, keyUpCb, false, 0, true );

    stage.addEventListener( MouseEvent.MOUSE_DOWN, mDownCb, false, 0, true );
    stage.addEventListener( MouseEvent.MOUSE_UP, mUpCb, false, 0, true );
    addEventListener( Event.ACTIVATE, activateCb, false, 0, true );
    addEventListener( Event.DEACTIVATE, dectivateCb, false, 0, true );
}

private function activateCb( evt:Event ):void
{   extInt("activate");
}

private function dectivateCb( evt:Event ):void
{   extInt("deactivate");
}

private function mDownCb( evt:MouseEvent ):void
{   extInt("mouseDown");
}

private function mUpCb( evt:MouseEvent ):void
{   extInt("mouseUp");
}

private function keyDnCb( evt:KeyboardEvent ):void
{   extInt( "keyDn" );
}

private function keyUpCb( evt:KeyboardEvent ):void
{   extInt( "keyUp" );
}

private function extInt( wha:String ):void
{   try
    {   ExternalInterface.call( "AS2JS", wha );
    }
    catch (ex:Error)
    {   trace('ex: ' + ex);
    }
}

}
}

8
задан Community 23 May 2017 в 10:32
поделиться

2 ответа

Вот, что я ожидаю, происходит: вы нажимаете клавишу, когда фокус находится в html. Вы щелкаете по объекту вспышки, и фокус переходит на него. Когда ключ поднят, поскольку html больше не имеет фокуса, он не знает о поднятом ключе. Вы можете легко проверить это, сделав то же самое, только вместо того, чтобы щелкнуть объект flash, щелкнуть другое окно и попробовать то же самое, потому что это фактически то, что происходит.

Что касается события нажатия клавиши, которое не происходит во флэш-памяти, это, вероятно, потому, что оно не генерирует события нажатия клавиши без нажатия клавиши, чего никогда не было, потому что фокус все еще находился в html.

Я могу придумать два возможных решения этой проблемы. Во-первых, убедитесь, что объект вспышки начинается с фокусировки . Второй - наложить пустой div поверх flash-объекта, чтобы он никогда не получил фокус.

1
ответ дан 6 December 2019 в 02:24
поделиться

Поместите ваш SWF Embed перед любым другим JavaScript.

swfobject.embedSWF( "tmp.swf",
                            "f2",
                            "100%",
                            "20px",
                            "9.0.0.0", null, {}, {}, {} );

Я бы попробовал сделать это вне всех функций или в готовой к документу функции jQuery, потому что Flash получает z-index бесконечности и должен принимать нажатия клавиш раньше всего остального, если только он еще не присутствует, когда происходит первое нажатие клавиши.

Мое предположение заключается в том, что первый удар по клавише происходит до того, как что-либо успевает его принять. Попробуйте использовать триггер события keyup с jQuery в функции on document ready.

0
ответ дан 6 December 2019 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: