Фикс за wmode бъга на флаш плейъра под FireFox
Бях писал за фикснатият wmode бъг в новата версия на флаш плейъра под FireFox, но сега вече направих почти цялостен фикс за проблема. Самият проблем се появява, когато се използва клавишната комбинация shift+стрелки за селекция на текст в текстово поле. И така, това което направих беше да пренапиша TextInput класа и да го използвам него вместо оригиналния. Имплементацията може би изглежда странна, но работи! Въпреки, че не е цялостно решение, аз си изгубих бая време да си поиграя с този алгоритъм и така и не успях да го подкарам да работи изцяло както се очаква. Ако някой иска да вложи също малко време в това ето го и кода:
package
{
import mx.controls.TextInput;
import mx.events.FlexEvent;
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.ui.Keyboard;
import flash.external.ExternalInterface;
public class CafeTextInput extends TextInput
{
private var ssi : int = 0;
private var sei : int = 0;
private var shiftDirection : String = 'none';
private var lastShiftDirection : String = 'none';
public function CafeTextInput()
{
super();
var method:XML = </.test(navigator.userAgent), version:navigator.appVersion};}
]]>
var o:Object = ExternalInterface.call( method );
if(o.ff)
{
this.addEventListener(KeyboardEvent.KEY_DOWN, onBeforeKeyDown, false, 10000);
this.addEventListener(KeyboardEvent.KEY_DOWN, onAfterKeyDown, false, -10000);
}
}
private function onBeforeKeyDown(e : KeyboardEvent) : void
{
if (e.keyCode == Keyboard.LEFT || e.keyCode == Keyboard.RIGHT)
{
if(ssi == -11111111 && sei == -11111111)
{
ssi = this.selectionBeginIndex;
sei = this.selectionEndIndex;
}
}
}
private function onAfterKeyDown(e : KeyboardEvent) : void
{
if (e.keyCode == Keyboard.LEFT || e.keyCode == Keyboard.RIGHT)
{
if(ssi != -11111111 && sei != -11111111)
{
if(e.shiftKey)
{
if(sei == ssi)
{
shiftDirection = 'none';
}
if(e.keyCode == Keyboard.LEFT)
{
if(shiftDirection == 'right' && lastShiftDirection != 'right')
{
sei--;
}
if(shiftDirection == 'none' && ssi+1 == sei)
{
shiftDirection = 'left';
}
this.setSelection(sei, ssi);
lastShiftDirection = 'left';
}
else if(e.keyCode == Keyboard.RIGHT)
{
if(shiftDirection == 'left' && lastShiftDirection != 'left')
{
ssi++;
}
if(shiftDirection == 'none' && ssi+1 == sei)
{
shiftDirection = 'right';
}
this.setSelection(ssi, sei);
lastShiftDirection = 'right';
}
}
else
{
shiftDirection = 'none';
this.setSelection(ssi, sei);
}
ssi = -11111111;
sei = -11111111;
}
}
}
}
}
Прочети статията на: English











English
Bulgarian 

Все още няма коментари.