IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Решение проблемы ввода кириллицы на прозрачном фоне
  • Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта
  • Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом
chingachgoog
сообщение 20.05.2009 - 12:47
Сообщение #1


Активист
****

Группа: Пользователь
Сообщений: 980
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



Широко известна проблема, когда флеш плеер (ФП) с установкой wmode в прозрачность или даже вообще упоминание установки wmode делало невозможным ввод кириллического текста в поля ввода.
Широко известно и "решение" проблемы - установить wmode в непрозрачный или вообще не упоминать wmode.

Недавно случайно заинтересовался этой проблемой (почему недавно - потомучто с интернет-разработками я работаю редко). И мне удалось понять причину (механизм) глюка и соответственно его компенсировать.

Итак, механизм:

В режиме с установленным wmode в прозрачность в текстовое поле ввода вводиться русская буква "й".
Но вместо буквы "й" мы видим - нет, не "...й", а "F".
Как это происходит:
тупой ФП берет 16-ричный код символа и разбивает его на пары:
буква "й" - код 1081 в 16-ном виде это - 439 или 0x0439.
Далее ФП разбивает код на 0x04 и 0x39, т.е. на символы 4 и 57 в 10-чном виде и в результате вместо буквы "й" мы имеем бред в виде "F"

Компенсация:

Создаем метод checWM:

Код
TextField.prototype.checWM=function(){
    var marker=String.fromCharCode(0x4)
    var txt=this.text
    for (var idx=txt.indexOf(marker); idx>-1; null){
        var realLetter=String.fromCharCode(parseInt((0x4+txt.charCodeAt(idx+1).toString(16)),16))
        txt=txt.slice(0, idx)+realLetter+txt.slice(idx+2)
        Selection.setSelection(idx+1, idx+1);
        idx=txt.indexOf(marker)
    }
    this.text=txt
}


Далее придется использовать этот метод в обработчике onChanged (этот обработчик с большой долей вероятности будет и так использоваться вместе с текстовым полем ввода):

Код
имя_поля_ввода.onChanged=function(){
    this.checWM()    
}


Собственно демонстрация:
Прикрепленный файл  transparentWM.rar ( 8.73 килобайт ) Кол-во скачиваний: 5


add:

NB!
После публикации поста пришли ссылки на уже существующие решения, типа
http://flash-mx.ru/forum/topic_show.pl?pid...hlm=and#pid1281
Не удивлен.
Я решил эту задачку за полчаса (главное было разобраться с механизмом глюка).
А решений компенсации глюка может быть море.
Наверняка, в сети при желании можно найти кучу таких "оригинальных" решений, но специально не искал - интереснее было разобраться самому, тем более что самый распространенный ответ - уберите wmode, т.к. проблема решения не имеет.
(IMG:style_emoticons/default/smile.gif)

Сообщение отредактировал chingachgoog - 20.05.2009 - 14:31
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
MustLive
сообщение 20.05.2009 - 19:58
Сообщение #2


Ветеран конференции
*****

Группа: Flash Zone Team
Сообщений: 4293
Регистрация: 10.03.2005
Из: Киев
Пользователь №: 5



Цитата
тем более что самый распространенный ответ - уберите wmode, т.к. проблема решения не имеет.

chingachgoog

Проблема не имеет кросс-браузерного решения. Поэтому для решения проблемы с вводом текста во флеш во всех браузерах единственным решением является неиспользование прозрачности в wmode.

Цитата
Я решил эту задачку за полчаса (главное было разобраться с механизмом глюка).

Я рад, что ты попытался решить эту задачу. Но ты её полностью не решил, а поэтому данное решение является лишь частичным (для IE), и не может быть рекомендовано к использованию. Тем кому хватит того, что в IE этим методом проблема решается и кто не заботится о кросс-браузерности (т.е. кто только на ИЕ ориентируется), те могут его использовать, но серьёзным веб проектам, которые заботятся о кросс-браузерности данный метод не подходит. Для серьёзных проектов единственный метод (для ввода текста во флеш) - это неиспользование прозрачности.

Цитата
И мне удалось понять причину (механизм) глюка и соответственно его компенсировать.

Данная причина глюка имеет место только в браузере IE. В других браузерах - Mozilla, Firefox, Opera, Chrome и других - причина глюка другая. Если в IE вместо кириллицы выводятся некорректные символы, то в других браузерах вообще не переключается раскладка (т.е. остаётся английская раскладка).

И при использовании твоего метода ситуация изменяется только в IE (становится доступным ввод кириллицей в прозрачной флешке). В других браузерах ситуация не изменяется, как я проверил - в Mozilla, Firefox, Opera и Chrome по прежнему нельзя вводить кириллицу. Поэтому данное решение не является кросс-браузерным. Так что всегда проверяй свои решения также в браузерах помимо IE.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
chingachgoog
сообщение 20.05.2009 - 20:15
Сообщение #3


Активист
****

Группа: Пользователь
Сообщений: 980
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



Цитата(MustLive @ 20.05.2009 - 20:58) *
В других браузерах - Mozilla, Firefox, Opera, Chrome и других - причина глюка другая. Если в IE вместо кириллицы выводятся некорректные символы, то в других браузерах вообще не переключается раскладка (т.е. остаётся английская раскладка).


MustLive, у меня только IE7. (IMG:style_emoticons/default/rolleyes.gif)
Правильно ли я понял, что в других браузерах текст МОЖНО ВВОДИТЬ, но он будет латиницей и безо всяких кракозябл? Или все же либо будут кракозяблы либо вообще текст будет невозможно вводить?

Цитата(MustLive @ 20.05.2009 - 20:58) *
Поэтому данное решение не является кросс-браузерным. Так что всегда проверяй свои решения также в браузерах помимо IE.


Собственно это и было написано в ссылке, что я дал в Nota bene.
На кроссбраузерность не претендую, но на как одно из решений - почему нет? Если остается возможность вводить латиницу - так совсем хорошо.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
MustLive
сообщение 24.05.2009 - 23:31
Сообщение #4


Ветеран конференции
*****

Группа: Flash Zone Team
Сообщений: 4293
Регистрация: 10.03.2005
Из: Киев
Пользователь №: 5



Цитата
MustLive, у меня только IE7.

chingachgoog, я так и понял. Потому и порекомендовал тебе всегда проверять все свои веб разработки также в браузерах помимо ИЕ (как минимум в одном альтернативном браузере, например, в Firefox).

Цитата
Правильно ли я понял, что в других браузерах текст МОЖНО ВВОДИТЬ, но он будет латиницей и безо всяких кракозябл?

В альтернативных браузерах текст можно вводить только латиницей. Что с твоим методом, что без него - если указана прозрачность (в wmode). Только без указания прозрачности можно вводить текст кириллицей во всех браузерах (как в ИЕ, так и других браузерах).

Крякозябры есть только в ИЕ (при указанной прозрачности, что решается для ИЕ твоим методом). В других браузерах вообще нет крякозябр при вводе текста.

Цитата
Собственно это и было написано в ссылке, что я дал в Nota bene.

Во-первых, читать информацию по ссылке в NB не стал, т.к. у меня всегда есть что почитать, и информации публикуемой непосредственно на форуме мне хватает (и без других форумов). В том числе изучения твоего метода мне вполне хватило (для ознакомления с существующими методиками борьбы с transparent-багом).

Во-вторых, как видно из твоего NB, в том посте речь шла о других методах (и соответственно все заявления в той теме относятся к ним), а в этой теме мы говорим о твоём методе. И в этой теме никаких заявлений о работе только под IE от тебя не было (IMG:style_emoticons/default/wink.gif) .

Цитата
На кроссбраузерность не претендую, но на как одно из решений - почему нет?

Данное решение - это одно из частичных решений. А если решение не кросс-браузерное, то оно в большинстве случаев не является приемлемым.

Цитата
Если остается возможность вводить латиницу - так совсем хорошо.

Вводить латиницу во всех браузерах можно и без использования твоего метода. А для всех браузеров помимо ИЕ метод не решает данной проблемы. Также не забывай, что браузер ИЕ есть только под Windows (и старые версии ИЕ под Mac OS), и не все люди используют ОС Windows и тем более не все люди пользуются ИЕ (даже среди пользователей Windows). Поэтому для широкого использования какого-либо метода нужно кросс-браузерное решение.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
chingachgoog
сообщение 25.05.2009 - 11:29
Сообщение #5


Активист
****

Группа: Пользователь
Сообщений: 980
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



Цитата(MustLive @ 25.05.2009 - 00:31) *
chingachgoog, я так и понял. Потому и порекомендовал тебе всегда проверять все свои веб разработки также в браузерах помимо ИЕ (как минимум в одном альтернативном браузере, например, в Firefox).


Согласен, но у меня их просто нет (IMG:style_emoticons/default/smile.gif)
Так что вся ответственность за использование и работоспособность метода - на самих разработчиков, кто рискнет использовать.

Цитата(MustLive @ 25.05.2009 - 00:31) *
В альтернативных браузерах текст можно вводить только латиницей. Что с твоим методом, что без него - если указана прозрачность (в wmode). Только без указания прозрачности можно вводить текст кириллицей во всех браузерах (как в ИЕ, так и других браузерах).
...Вводить латиницу во всех браузерах можно и без использования твоего метода. А для всех браузеров помимо ИЕ метод не решает данной проблемы.


По крайней мере метод не мешает под альтернативными браузерами вводить латиницу, что само по себе хорошо.
А работу под IE будем считать дополнительной возможностью, а не 100% решением проблемы. Лучше что-то чем ничего.

Цитата(MustLive @ 25.05.2009 - 00:31) *
Также не забывай, что браузер ИЕ есть только под Windows (и старые версии ИЕ под Mac OS), и не все люди используют ОС Windows и тем более не все люди пользуются ИЕ (даже среди пользователей Windows). Поэтому для широкого использования какого-либо метода нужно кросс-браузерное решение.


100% кроссбраузерных решений нет вообще. Где-то что-то теряется, глючит...
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
MustLive
сообщение 25.05.2009 - 19:38
Сообщение #6


Ветеран конференции
*****

Группа: Flash Zone Team
Сообщений: 4293
Регистрация: 10.03.2005
Из: Киев
Пользователь №: 5



Цитата
Согласен, но у меня их просто нет

В моих словах имеется намёк - скачай и поставь себе как-минимум один альтернативный браузер (тот же Firefox). И в нём также тестируй свои наработки.

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

Цитата
100% кроссбраузерных решений нет вообще.

Есть такое решение (IMG:style_emoticons/default/wink.gif) - не использовать прозрачность в wmode при необходимости введения данных во флешку. Этот метод работает во всех браузерах. Если разработчик захочет использовать прозрачность для флешек, то пусть её он укажет для флешек, где нет ввода данных в текстовое поле (например, в баннерах).
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
chingachgoog
сообщение 26.05.2009 - 11:49
Сообщение #7


Активист
****

Группа: Пользователь
Сообщений: 980
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



Мне кажется, что то решение, которое представил я, подойдет для случаев когда ввод кириллицы не обязателен, но возможен. Пусть это будет приятной неожиданностью для пользователей IE.
Для других браузеров мне предложили такое решение: использовать непрозрачную флешку поверх прозрачной (это когда именно под текстовым полем прозрачность не требуется). Тоже не для всякого дизайна подойдет.
Но решение не ходить в лес, так как волки могут съесть (не использовать wmode), я решением не могу назвать. (IMG:style_emoticons/default/smile.gif)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
chingachgoog
сообщение 27.05.2009 - 12:07
Сообщение #8


Активист
****

Группа: Пользователь
Сообщений: 980
Регистрация: 27.02.2009
Из: Moscow
Пользователь №: 9144



Все же я нашел 100% решение данной проблемы (IMG:style_emoticons/default/smile.gif)
Это относится к десктопным разработкам с использованием MDM Zinc.
В Цинке тоже есть режим создания приложения с прозрачным фоном. Я проверил и оказалось, что там тот же глюк, что и в IE.
Т.е. мой предыдущий код ПОЛНОСТЬЮ решает проблему для Цинк-приложений с прозрачным фоном.

Но обнаружились новые трудности (IMG:style_emoticons/default/smile.gif)
Предыдущее решение работает только для шрифта без внедренного текста. Если же текст был внедрен, то перестает работать.
Пришлось внедрить отдельно символ 0х4 "" - метод заработал, но некоторые заглавные кириллические буквы все же слетали.
Если при внедрении шрифта выбрать ВСЕ символы, а не выборочно, то и этот последний глюк исчезал.
Вообщем, для дескопного приложения не страшно внедрять ПОЛНЫЙ набор символов, но мне так не нравится, поэтому я нашел символы, которые требуется для внедрения: "". Теперь внедрять ВСЕ символы не нужно.
Тем не менее, заглавная буква "Ё" живет отдельной жизнью и не желает появляться. Пришлось ради нее немного поменять код:

Код
TextField.prototype.checWM=function(){
    var marker=String.fromCharCode(0x4)
    var txt=this.text
    for (var idx=txt.indexOf(marker); idx>-1; null){
        var realLetter=String.fromCharCode(parseInt((0x4+txt.charCodeAt(idx+1).toString(16)),16))
        if (txt.charCodeAt(idx+1)==1) realLetter="Ё"
        txt=txt.slice(0, idx)+realLetter+txt.slice(idx+2)
        Selection.setSelection(idx+1, idx+1);
        idx=txt.indexOf(marker)
    }
    this.text=txt
}


Теперь проблема ввода кириллического текста в Цинк-приложение с прозрачным фоном решена ПОЛНОСТЬЮ! На 100% (IMG:style_emoticons/default/smile.gif)

(так же это работает для IE)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 11.09.2011 - 17:04