رفع مشکل wmode با زبان فارسی در فلش

error

پیش زمینه:
اگر بخواهید فایل فلشی را در صفحه html قرار دهید به طوری که پس زمینه آن شفاف (transparent) باشد باید پارامتر wmode را مساوی با transparent قرار دهید.
در اینترنت اکسپلورر: <param name=»wmode» value=»transparent» />

در فایرفاکس: <embed src=»file.swf» wmode=»transparent»>

روشهای دیگری برای قرار دادن فایل فلش در صفحه وجود دارد اما در همه آنها این مشکل وجود دارد که در این حالت (wmode=transparent) تکست باکس های موجود در فایل فلش اگر از نوع input باشند کاراکتر های یونیکد که فارسی هم جزء آن است را نمیپذیرد!

برای روشن تر شدن مشکل اینجا را ببینید.

این باگ حداقل از سال 2005 (بر اساس نتیجه سرچ ها)  در فایرفاکس، اینترنت اکسپلورر و سافاری موجود بوده و هم ادوبی (ماکرومدیای سابق) فلش و هم موزیلا از آن مطلع شده اند اما تا همین الان این مشکل وجود دارد و راه حل رسمی ارائه نشده! هرچند برخی از کاربران راه حل هایی ایجاد کرده اند اما برای من هیچ کدام جواب نداد و مجبور به نوشتن کلاسی شدم که میتوانید از آن استفاده کنید.

بعضی راه های ارائه شده:

1- در یک فروم روسی، استفاده از این راه پیشنهاد شده:(TF از نوع textField هست)

TF.onSetFocus = function() {   this.embedFonts = false; };
TF.onKillFocus = function() {   this.embedFonts = true; };
TF.onChanged = function() {   var broken = this.text.split(chr(4));
for (var i = 1; i<broken.length; i++) {
broken[i] = String.fromCharCode(1024+broken[i].charCodeAt(0))+
broken[i].substr(1);   }
this.text = broken.join(""); };

2- راه حل بعدی استفاده از کلاس JSTextReader است. برای دریافت کلاس ها اینجا کلیک کنید و برای اطلاع از چگونگی استفاده از کلاس اینجا را ببینید. *برای دریافت این کلاس با AS3 اینجا را ببینید.

3- این روشی است که من ترجیح دادم از آن استفاده کنم! (بر اساس AS2 ) یعنی تبدیل کاراکتر های انگلیسی به معادل فارسی. البته عیب این روش این است که کاراکتر های انگلیسی قابل استفاده نخواهد بود! اگر آشنایی مختصری با اکشن اسکریپت داشته باشید به راحتی این محدودیت را نیز میتوانید رفع کنید! من بر اساس نیازی که داشتم(فقط کیبرد فارسی) این کلاس را ایجاد کرده ام که میتوانید از آن استفاده کنید. روش استفاده هم خیلی ساده است:

بعد از ایمپورت کردن کلاس به پروژه خود یک شیء از نوع fixWmode، با صدا زدن متد fix کاراکتر ها اصلاح میشوند:

import farsi.fixWmode;

var fixer:farsi.fixWmode=new farsi.fixWmode();

fixer.fix(TEXTBOX);

بیان دیدگاه