PDA

نسخه کامل مشاهده نسخه کامل : آموزش: Fs Commands ها در فلش



mahyar00
13-05-2007, 07:26
در اكثر كاربردهاي واقعي, شرايطي پيش مي آيد كه از طراح فلش خواسته مي شود تا از درون فيلم فلش عملي را انجام دهد كه به صورت عادي خارج از حوزه امكانات و قابليت هاي اين نرم افزار است. به عنوان مثال فرض كنيد كه شما به عنوان يك طراح فلش, يك نمايش مقدمه يا اصطلاحا Intro بسيار زيبا براي سايتي طراحي كرده ايد. اگر كارفرما از شما بخواهد كه كليدي براي Bookmark كردن سايت, در پروژه خود بگنجانيد, تكليف شما چيست؟ در بين مجموعه دستورات فلش به دنبال چنين دستوري مي گرديد؟ در چنين موردي و در بسياري از موارد جدي تر, كافي است كه طراح فلش بتواند به روشي, از درون محيط فلش به امكانات مرورگر دسترسي بيابد. در اين صورت به يكباره, دنيايي از امكانات جديد به مجموعه قابليت هاي قبلي نرم افزار فلش افزوده خواهد شد.

از اين مقدمه چيني مي توانيد به راحتي تشخيص دهيد كه دستور FSCommand چنين امكاني را در اختيار كاربر فلش قرار مي دهد. اگرچه اين نتيجه گيري كاملا صحيح است, اما حقيقت آن است كه دامنه كاربردهاي دستور FSCommand در فلش مي تواند بسيار وسيع تر از اين هم باشد.

در واقع دستور FSCommand در فلش, ابزاري است كه ارتباطات بين فيلم هاي فلش و محيط ميزبان اين فيلم ها را برقرار مي كند. در اينجا منظور از محيط ميزبان فيلم هاي فلش, بر حسب مورد مي تواند محيط مرورگر و يا محيط نرم افزار Flash Player باشد. ميزبان محيطي است كه فيلم هاي فلش در درون آن به نمايش در مي آيند و يا اجرا مي شوند. به عنوان مثال, در كاربردهاي تحت وب, دستور FSCommand مي تواند براي اجرا كردن كد جاوا اسكريپت به كار رود ( در ادامه همين نوشته خواهيم ديد كه چگونه مي توان در مسير معكوس حركت كرد, يعني به كمك جاوا اسكريپت, فيلم فلش را كنترل نمود).

در صورتي كه با كار توليد محصولات چند رسانه اي و ابزارهاي آن مانند نرم افزار دايركتور آشنا باشيد, احتمالا اهميت قابليت صدور فرمان از فيلم هاي فلش به محيط ميزباني همچون دايركتور و يا بر عكس را كاملا درك مي كنيد. در واقع مي توان از دستور FSCommand براي برقراري ارتباط با زبان اسكريپت نويسي دايركتور يعني Lingo به خوبي استفاده كرد.

بازگرديم به همان كاربردهاي فراوان تر اينترنتي و وب. قبل از هر چيز بايد به خاطر داشته باشيم كه همه مرورگرها از دستور FSCommand پشتيباني نمي كنند و در صورتي كه در كاربرد واقعي قرار است كه سايت شما در چندين مرورگر به راحتي قابل مشاهده باشد, بايد به اين مسئله توجه كافي داشته باشيد. طبيعي است كه انتظار داشته باشيم تمامي نسخه هاي جديدتر مرورگر اينترنت اكسپلورر (نسخه 4 به بالا) از اين دستور پشتيباني كنند. مرورگر نت اسكيپ نسخه 6 هم با وجود آنكه تفاوت هاي اساسي با مرورگر IE دارد, از دستور FSCommand پشتيباني مي كند (مرورگر نت اسكيپ به جاي استفاده از تكنولوژي اكتيو ايكس, به تكنولوژي ديگري مرسوم به Live Connect براي پشتيباني از FSCommand و نظاير آن متكي است). كاربران مرورگر موزيلا هم مي توانند با ارتقاء دادن Plugin هاي خود, از اين قابليت استفاده كنند. ( در مورد مرورگر پرسرو صداي firefox هنوز اطلاعي ندارم و نمي دانم كه چند و چون كاربرد FSCommand در محيط اين مرورگر چگونه است).

ارتباط دو طرفه
تا اينجا درباره مفهوم دستور FSCommand صحبت كرديم, اما اين دستور چگونه كار مي كند؟ براي تشريح اين موضوع, از كاربرد اين دستور در برقراري ارتباط بين اكشن اسكريپت و جاوا اسكريپت و با لعكس استفاده خواهيم كرد.البته توجه داشته باشيد براي اين مورد خاص, يعني اجراي اسكريپت هاي جاوا اسكريپت از درون محيط فلش, مي توان از تابع ديگري به نام (getURL) در فلش استفاده كرد. اما كاربرد اين تابع تنها محدود به ارتباط با جاوا اسكريپت است و به طور كلي نمي توان از آن براي ارتباط بين فلش و محيط ميزبان بهره گرفت.
در محيط فلش, هر گاه تابع FSCommand اجرا شود, نرم افزار فلش سعي خواهد كرد تا پيامي به جاوا اسكريپت ارسال نمايد. از طرف ديگر, هر گاه مرورگري, فرمان FSCommand را از نرم افزار فلش دريافت كند, بلا فاصله به جستجوي توابع جاوا اسكريپت (و يا VB script) موجود مي پردازد. در واقع اگر در محيط مرورگر (صفحه وب) قبلا توسط طراح فلش, تابع مناسبي تعبيه شده باشد (كه به آن تابع catcher مي گويند), در اين صورت مرورگر به محض دريافت فرمان FSCommand با آ‎رگومان هاي مشخص, در مي يابد كه بايد تابع catcher را اجرا كند. بدين ترتيب ارتباط يك طرفه بين محيط فلش و مرورگر با استفاده از اين پروتكل قراردادي, برقرار مي شود. به ياد داشته باشيد كه تابع يا اصطلاحا دستور FSCommand داراي دو پارامتر است كه به اولي پارامتر Command و به دومي پارامتر Argument نام نهاده اند. محيط اجرا كننده دستور FSCommand, اين دو پارامتر را به محيط ميزبان كه در اينجا جاوا اسكريپت است, انتقال مي دهد.

در قطعه كد 1, چنين فرايندي تشريح شده است. در اين قطعه كد, دستور FSCommand, يك تابع جاوا اسكريپت alert را در محيط ميزبان (مرورگر) فراخواني مي كند (تابع alert در جاوا اسكريپت, معادل تابع messagebox در زبان هاي ديگر است). پارامترهاي فراوان FSCommand در مثال يك, به ترتيب عبارتند از, و اين حالت در دنياي واقعي, به شكل زير به به كار برده مي شود: FSCommand ("call-alert", "Hello World")
همان طور كه قبلا يادآور شديم, پياده سازي دستور FSCommand در مرورگرهاي IE و Netscape با يكديگر تفاوت دارند. در شكل يك, چگونگي انتقال دستور از فلش به جاوا اسكريپت در هر دو مرورگر نمايش داده شده است.
در اين مرحله مناسب است كه بر اساس آنچه تا كنون بيان شد, يك تمرين عملي بسازيم. براي اين كار مي توانيد مراحل زير را به صورت گام به گام انجام دهيد:

استفاده از دستور FSCommand در محيط فلش:

يك فايل جديد فلش ايجاد كنيد و در فاصله چند ثانيه بعد از فريم آغازي, يك keyframe ايجاد كنيد.
پنجره اكشن اسكريپت را براي keyframe ايجاد شده, باز كنيد.
از منوي Actions در اين پنجره, فرمان FSCommand را انتخاب نماييد. در اين مرحله بخش پارامترهاي اين پنجره, شامل دو ورودي متني خواهد بود. به طور معمول بايد در جاي پارامتر Command از نام تابع جاوا اسكريپت استفاده كنيد.
در جعبه متن Command عبارت "callalert" را قرار دهيد.
در جعبه متن arguments عبارت "Hell World" را وارد نماييد.

قرار دادن فيلم فلش در درون صفحه وب:

يك فايل HTML ايجاد كرده و از برچسب هاي object و embed براي جاي دادن فيلم فلش در اين صفحه وب, كمك بگيريد. براي اين كار, اطمينان حاصل نماييد كه نام فيلم فلش خود را با استفاده از ID در عبارت object و Name در برچسب Embed, به درستي بيان كرده باشيد. موفقيت اجراي دستور FS به طور كامل به نام گذاري يكسان فيلم فلش و اسامي ذكر شده در برچسب هاي صفحه وب, وابسته است. (اگر با مرورگر نت اسكيپ كار مي كنيد, فراموش نكنيد كه سوييچ swLiveConnect="true" را به كار بريد) پس از انجام اين مراحل, صفحه HTML شما بايد چيزي مشابه با قطعه كد شماره يك باشد.

اضافه كردن اسكريپت به صفحه وب:

در صورتي كه با مرورگر IE كار مي كنيد, مي توانيد از vbscript براي اين منظور استفاده كنيد. اگر از قطعه كد يك به ياد داشته باشيد, مي دانيد كه مرورگر IE از قطعه كوچكي كد vbscript براي دريافت كردن دستور FSCommand و ارسال آن به جاوا اسكريپت, استفاده مي كند. در اين مرحله, اين بخش از كار را انجام مي دهيم. براي اين منظور, مي توانيد قطعه كد 2 را در بخش Head صفحه وب قرار دهيد. توجه داشته باشيد كه عبارت testMovie را به نام فايل فلش خود تغيير دهيد. يعني همان نامي كه در برچسب هاي object و embed به كار برده ايد.

اضافه كردن كد جاوا اسكريپت براي دريافت كردن دستور FSCommand

تا اينجا, فيلمي ساخته ايم و در درون صفحه وب قرار داده ايم كه فرمان FSCommand مشخصي را به محيط مرورگر ارسال مي كند. حالا بايد تابع جاوا اسكريپتي بنويسيم كه فرمان FS را دريافت يا اصطلاحا "catch" كند. براي اين كار مي توانيد قطعه كد 3 را در بخش Head صفحه وب قرار دهيد. تاكيد مي كنيم كه نام testMovie را به نام فيلم خود تغيير دهيد.

شرح ماجرا

در قطعه كد 3, تابع testMovieDoFSCommand هر بار كه فيلم testmovie فرمان FS را ارسال كند, يك بار اجرا خواهد شد. كليد واژه DoFSCommand, كليد واژه اي است كه از طرف فلش براي مشخص كردن توابعي كه از طريق فرمان FSCommand فراخواني مي شوند, به كار مي رود. پيشوند testmovie بيانگر فيلمي است كه فرمان FS را ارسال مي كند. بدين ترتيب تابعي كه مثلا foomovieDoFSCommand نام داشته باشد, زماني اجرا خواهد گرديد كه فيلمي به نام foomovie فرمان FS را ارسال كند. موضوع ديگر, پارانترهاي دوگانه command و args هستند. همان طور كه قبلا گفته شد, اين دو پارامتر, مقاديري هستند كه به تابع مقصد ارسال يا انتقال داده مي شوند.

چگونه جاوا اسكريپت با فلش صحبت مي كند

در كاربردهاي واقعي, مواردي را مي توان يافت كه در آن ها نياز به ارسال فرمان يا مقداري, از محيط ميزباني مانند مرورگر به فيلم فلش خواهيم داشت. به طور معمول, مي توان با فراخواني متد هاي ويژه اي از جاوا اسكريپت, فرمان هايي را به فلش ارسال كرد. فراخواني متد هاي فلش, دقيقا همانند تمام فراخواني هاي متد هاي دروني جاوا اسكريپت است, مثلا document.write() يا .window.close() از نگاه يك برنامه نويس, چنين ارتباطي, روشي يك طرفه محسوب مي شود. در اين روش ها, متد هاي جاوا اسكريپت, يك فيلم فلش را كنترل مي كنند و نيازي به هيچ ترفند ويژه اي در سمت مقابل (در فيلم فلش) ندارد.
در اينجا براي درك بهتر موضوع از يك مثال ساده براي كنترل كردن يك فيلم فلش توسط جاوا اسكريپت, استفاده مي كنيم. براي ساختن چنين مثالي به ترتيب زير عمل كنيد:
فيلم فلش مورد نظر خود را در درون يك صفحه وب embed كنيد. براي اين كار دقيقا همانند مثال قبلي عمل كنيد وباز هم يادآوري مي كنيم كه نام گذاري فيلم را به صورت صحيح در بر چسب هاي object و embed رعايت نماييد.

اضافه كردن تابعي براي اشاره به شي فيلم

توجه داشته باشيد كه توابع جاوا اسكريپت براي فراخواني فلش, از دو بخش عمده تشكيل مي شوند. نخست, تابعي كه متد شي فلش را فراخواني مي كند و بخش دوم, تابعي است كه syntax صحيح براي اشاره به شي فلش را بر مي گرداند. البته بخش دوم, كاملا وابسته به مرورگر مورد استفاده است. البته مي توان شكل syntax صحيح را به صورت مستقيم (hard code) در درون تابع نخست به كار برد, اما به دلايل رعايت اصول برنامه نويسي, در اينجا ترجيح داده ايم كه چنين نكنيم. قطعه كد شماره 4, اين اسكريپت را نشان مي دهد.
در اسكريپت شماره 4, مقدار متغير moviename را به نام فيلم فلش خود, تغيير دهيد. پس از اين مرحله, يعني زماني كه خيالمان از بابت نوع مرورگر و رسم الخط نوشتاري توابع, راحت شد, نوبت مي رسد به بخش اصلي, يعني همان تابعي كه متد فلش را فراخواني مي كند. براي اين كار مي توانيم به صورت زير عمل كنيم:
Function Playmovie() {
thisMovie(movieName).Play();
}
بدين ترتيب بدون نگراني از بابت نوع مرورگر, خواهيم توانست, متد فلش مورد نظر خود را فراخواني نماييم.
اما مي دانيم كه هميشه مسائل ظريفي در كار ايجاد مي شوند كه باعث ايجاد تفاوت تئوري با آنچه در عمل رخ مي دهد, مي شوند (البته حقيقت مطلب آن است كه همواره تئوري هاي ضعيف با عمل تفاوت دارند و در صورتيكه تئوري به اندازه كافي مستحكم باشد, اساسا تفاوتي بين تئوري و عمل وجود نخواهد داشت). بگذريم, آنچه كه در اينجا بايد دقت شود, آن است كه در كاربردهاي اينترنتي, بايد به زمان هاي بارگذاري اشيا توجه داشته باشيم. مثلا ممكن است كه شما قصد ارسال دستوري به فيلم فلش داشته باشيد, اما در زمان انجام توابع اين كار, هنوز شي فلش به طور كامل در صفحه وب بارگذاري نشده باشد. براي بررسي اين قبيل موارد, مي توان از روش هاي متفاوتي كمك گرفت. به عنوان مثال, مي توانيد از متد percentLoaded فلش براي اين منظور بهره گرفت.
براي آنكه مثال خود را كامل كرده باشيم, يك گام ديگر را نيز به مجموعه عملياتي كه تا كنون طي كرده ايم, اضافه مي كنيم. همان طور كه در عمل هم هميشه چنين است, در اينجا سعي مي كنيم تا رويدادي در صفحه وب بسازيم كه وقوع آن منجر به فراخواني متد فلش شود. يكي از بهترين انتخاب هايي كه مي توانيم در اينجا انجام دهيم, آن است كه كليدي به صفحه وب بيفزاييم كه كليك كردن آن, متد شي فلش را فراخواني كند. براي اين كار از اسكريپت شماره 5 استفاده مي كنيم.
پس در اينجا با روش صحيح اجراي يك دستور جاوا اسكريپت بر روي يك شي فلش آشنا شديم. شما مي توانيد از روش ها و تكنيك هاي مشابهي براي فراخواني هر متد جاوا اسكريپتي كه توسط نرم افزار Flash Player پشتيباني مي شود, استفاده كنيد

mahsoft
13-05-2007, 07:40
ممنون مهیار جان عالی بود

ادامه بدید