Flash крадет фокус браузера

Еще одно полезное использование для Dispatcher.Invoke - это немедленное обновление пользовательского интерфейса в функции, выполняющей другие задачи:

// Force WPF to render UI changes immediately with this magic line of code...
Dispatcher.Invoke(new Action(() => { }), DispatcherPriority.ContextIdle);

Я использую это, чтобы обновить текст кнопки до « Обработка ... "и отключить его при выполнении запросов WebClient.

17
задан JMark 31 October 2008 в 17:07
поделиться

4 ответа

Можно использовать класс ExternalInterface в Flash для вызова JavaScript. Например, Вы могли настроить функцию через определенный интервал (Событие. ENTER_FRAME, например) для вызывания функции JavaScript, которую упомянул @Diodeus:

document.body.focus();

Или, еще лучшее решение состояло бы в том, чтобы добавить слушателя события корня флэш-памяти (этап) для прислушиваний, когда мышь оставляет Flash. Можно настроить это событие для перемещения фокуса в document.body.

AS3

package {
   import flash.display.*;
   import flash.events.*;
   import flash.external.ExternalInterface;

    public class TestMouseLeave extends Sprite
    {
        public function TestMouseLeave()
        {
            // Add event listener for when the mouse LEAVES FLASH
            addEventListener(MouseEvent.MOUSE_OUT, onMouseLeave);
        }

        private function onMouseLeave(ev:Event):void
        {
            var jslink = new ExternalInterface();
            jslink.call("changeFocus");
        }
    }

}

Javascript на Вашей странице:

<script type="text/javascript" language="javascript">
    function changeFocus(){
        document.body.focus();
    }
</script>

Сообщенный мне, если Вы хотите пример AS2, и я развешу его.

Требуемый для записывания об этом решении: Как только Вы продвигаете фокус назад к браузеру, Вы потребуете, чтобы пользователь нажал на плагин Flash снова для активации ввода данных пользователем в плагине флэш-памяти. Это могло быть резким пользовательским опытом и является чем-то для рассмотрения при использовании этого решения.

6
ответ дан 30 November 2019 в 14:33
поделиться

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

Однако я думаю большинство разработчиков Flash (и особенно те, кто делает игры), полагаются на то, что ввод с клавиатуры пойман приложением флэш-памяти независимо от того, где мышь.

3
ответ дан 30 November 2019 в 14:33
поделиться

Можно возвратиться, фокус к браузеру путем выполнения geturl может, называя JavaScript на странице HTML:

document.body.focus()

, Как Вы, это в Вашем фильме Flash будет зависеть от того, как взаимодействие с пользователем с фильмом работает. Вы могли продолжать делать его на таймере, или когда управление теряет фокус, или когда мышь перемещается. Это зависит.

0
ответ дан 30 November 2019 в 14:33
поделиться
    <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init();">
    <mx:Script>
        <![CDATA[
            private function init():void {
                i.setFocus();
                this.addEventListener(KeyboardEvent.KEY_UP,keyPressed);
            }

            private function keyPressed(event:KeyboardEvent):void {
                if(event.keyCode.toString()=="84" && event.ctrlKey==true)
                    ExternalInterface.call('newtab');
            }

        ]]>
    </mx:Script>
    <mx:TextInput x="23" y="268" width="256" id="i" text="Text Box"/>
</mx:Application>

<script type="text/javascript">
function newtab(e){
    document.body.focus();
    window.open('about:blank');
}
</script>    

Теперь, что происходит с другими клавиатурами? действительно ли 84 является стандартным для T? Мне нравится идея фокуса, но в полных приложениях браузера нет такого же количества комнаты для потери фокуса. Пользователь мог изменить ключевую комбинацию также, я не думаю, что это большая часть полной фиксации для этого без флэш-памяти, опрашивающей конфигурацию команды от браузера и затем прислушивающейся к комбинации, как мы в основном делаем здесь. Я не знаю.

Это также просто пытается открыть новое окно после предоставления фокуса, нет никакого смысла мне в том, чтобы заставлять пользователя нажать его дважды, если они не блокируют окно как всплывающее окно. Но фокус называют первым так, если это происходит, вторая попытка должна работать. Вы могли предупредить пользователя в приложении браузера в случае необходимости.

0
ответ дан 30 November 2019 в 14:33
поделиться
Другие вопросы по тегам:

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