برقراری ارتباط بین فایل های SWF و برنامه های دیگر در ActionScript 3

 

قسمت نخست تابع fscommand() 

 

 

Package -> flash.system

public function fscommand ( command:String , args:String = "" ):void

 

شما میتونید با استفاده از این تابع با Flash Player یا هر برنامه ای که Flash Player رومیزبانی میکنه ازتباط برقرار کنید، مثل یک مرور گر اینترنت. همینطور میتونید با این تابع پیغام هایی رو، به برنامه هایی که به فایل SWF شما، از طریق کنترل های ActiveX دسترسی دارند بفرستید مثل Director ، Visual Basic ، Visual C++ ، C# و ... .

 

این تابع امکان برقراری ارتباط با اسکریپ های Web Page شما رو میده، برای اینکار باید Attribute مربوطه رو در تگ PARAM در فایل HTML ی که SWF شما رو Embed کرده تنظیم کنید، این Attribute با نام allowScriptAccess معرفی میشه و دلیل اینکار اینه که این اجازه باید توسط Web Page شما به فایل SWF داده بشه تا بتونه با اسکریپ شما ارتباط برقرار کنه. این Attribute یکی از سه مقدار زیر رو میتونه داشته باشه:

 

1-      مقدار "never" ، یعنی صفحه وب شما این اجازه رو نداده.

2-      مقدار "always" ، یعنی همیشه میتونید به اسکریپت های Web Page دسترسی داشته باشید.

3-      مقدار "sameDomain" ، یعنی فقط SWF هایی که در همون Domain مربوط به Web Page شما هستن میتونن این دسترسی رو داشته باشن.

 

اگر این Attribute در کد HTML شما نباشه مقدار پیش فرض اون برای Flash Player 8 و به بالا برابر با "sameDomain" و برای Flash Player 7 و پایین تر برابر با "always" هست. در ضمن اگه میخواید امکان استفاده از این متد رو توسط فایل SWF  کاملا حذف کنید باید در تگ های object و embed، پارامتر allowNetworking رو به کد HTML تون اضافه کنید.

 

 


شما به چهار روش میتونید از این تابع استفاده کنید :

 

روش نخست

 برای ارسال پیغام به Flash Player شما باید از پارامترهایی که از پیش تعریف شده استفاده کنید. این پارامتر ها 6 تا هستند – زیاد ازشون استفاده کردید و میشناسید، اگر هم تازه کارید مطمئن باشید که در آینده زیاد استفاده میکنید – که در جدول زیر اومدن.

 

توضیح

مقدار مربوط به

args

مقدار مربوط به command

فایل SWF یا EXE شما رو میبنده.

 true یا false

quit

مقدار true باعث میشه Flash Player شما FullScreen بشه.

مقدار false باعث میشه Flash Player به حالت عادی خودش برگرده.

 True یا false

fullscreen

مقدار false باعث میشه که با تغییر اندازه پنجره Flash Player اندازه محتوای SWF شما تعییر نکنه و در همون اندازه ای که شما طراحی کردید بمونه و مقدار true اندازه محتوای شما رو همراه با تغییر اندازه Flash Player بزرگ یا کوچیک بشه.

 true یا false

allowscale

مقدار true نمایش تمام ایتم های Context Menu رو در Flash Player باعث میشه و مقدار false همه ایتم ها رو پاک میکنه بجز About Flash Player و Settings .

 true یا false

showmenu

این پارامتر فقط از داخل فایل های EXE اجرا میشه نه SWF و برنامه ای که آدرس شو دادین اجرا میکنه.

مسیر مربوط به برنامه ای یا فایل اجرایی که میخواید اجرا بشه*

exec

مقدار true باعث میشه که تمام event های مربوط به کلید ها به event onClipEvent(keyDown/keyUp) فرستاده بشه، حتی کلیدهایی مثل CTRL + F که برای FullScreen کردن Flash Player هست.

 true یا false

trapallkeys

 

* دقت کنید که عبارت " مسیر مربوط به برنامه ای یا فایل اجرایی ... " اومده. فایل های اجرایی در ویندوز عبارتند از *.exe ، *.bat ، *.com و بر این اساس برنامه ها  چون یک فایل اجرایی هستند اجرا میشن، این یعنی فایل هایی مثل *.pdf ، *.txt و از این قبیل نمیتونن با این تابع فراخوانی بشن و باید بطور غیر مستقیم و با فایل های bat اجرا بشن.

 

چند نکته:

 

1-      هیچ کدوم از این مقدار ها در یک Web Page کار نمیکنند.

2-      تمام ابن مقدار ها در برنامه های Stand – Alone کار میکنند، مثل Projector  ها یا همون Flash  Player خودمون.

3-      فقط دو مقدار exec و allowscale در محیط Test Movie نرم افزار Flash در دسترس هستند.

 

در exec فقط کاراکتر های A-Z ، a-z ، 0-9 ، ( . ) و ( _ ) میتونند در آدرس فایل بکار برن و در ضمن فایل های اجرایی باید در زیر فولدری به نام FSCOMMAND قرار بگیرن.

 

 

 روش دوم

شما میتونید با این تابع پیغامی رو به یک زبان اسکریپت نویسی در یک مرورگر وب مثل  JavaScript بفرستید. برای اینکار باید دو مقدار String یا یک عبارت رو بعنوان پارامتر های این تابع (command, args) بفرستید، و این دو مقدار توسط تابعی در JS که تابع fscommand رو handle میکنه استفاده میشن.

 

در یک مرورگر تابع fscommand، تابع moviename_DoFScommand رو صدا میزنه که در صفحه ای که فایل SWF در اون قرار داره باید نوشته بشه. اگه اسم فایل SWF شما myMovie باشه بنابراین نام تابع شما در JS برابر است با myMovie_DoFScommand .

 

تو صفحه ای که فایل SWF توشه باید allowScriptAccess رو برای اینکه فایل SWF شما به اسکریپ های صفحه وب دسترسی داشته باشه در کد HTML تون تنظیم کنید. اگر از Flash Player 9 استفاده میکنید این مطلب رو بخونید :

 

http://www.adobe.com/go/fp9_0_security

 

روش سوم

 با این تابع میتونید به Director و زبان اسکریپ نویسی اون Lingo ، مقداری رو بعنوان string یا یک event برای اجرای کد های Lingo بفرستید. برای اینکار باید در Lingo کدی رو بنویسید که این پبغام ها رو بگیره و کد مربوطه رو در Lingo اجرا کنه.

 

روش چهارم

 در Visual Basic ، Visual C++ و ... که از کنترل های ActiveX استفاده میکنند تابع fscommand یک event با دو مقدار string میفرسته که میتونید از این مقدار ها برای انجام کارهایی در VB و ... استفاده کنید.

 

نکته: اگر از Flash Player 8 یا بالا تر استفاده میکنید کلاس ExternalInterface توانایی ارتباطی بهتری رو بین JS (روش دوم) و کنترل های ActiveX (روش چهارم) با فایل های SWF به شما ارائه میده. برای موارد دیگه باید از همون fscommand استفاده کنید.

 

 


پارامتر ها:

 command:String ->

 رشته ای که به برنامه میزبان برای کاری فرستاده میشه یا دستوری که برای اجرای کاری مشخص به Flash Player فرستاده میشه.

args:String (default = "") ->

 رشته ای که به برنامه میزبان برای کاری فرستاده میشه یا مقداری که به Flash Player فرستاده میشه.

 

مثال ها: (برای دانلود مثال کلیک کنید)

مثال زیر روش استفاده از fscommand رو در Flash Player برای Full Screen کردن و تغییر اندازه ندادن محتوای SWF شما نشان میدهد. سپس یک باکس نارنجی رنگ با استفاده از متد draw() به Stage اضافه میکنه. در متد draw() یک event listener برای کلیک به نام clickHandler() که به رویداد click پاسخ میدهد و باعث خروج از فایل SWF میشود اضافه میشود.

 

(در Flash CS3 یا همون نسخه Public Alpha که دارید یک فایل .as یا ActionScript File باز کنید و این کد زیر رو توش کپی کنید. بعد یک New Document بسازید و در پانل Properties در قسمت Document Class نام این کلاس را وارد کنید. نام فایل .as شما باید با نام کلاس شما یکی باشه یعنی باید FSCommandExample باشه و در کنار فایل SWF شما قرار بگیرد.)

 

 

package

{

      import flash.display.Sprite;

      import flash.text.TextField;

      import flash.system.fscommand;

      import flash.events.MouseEvent;

 

      public class FSCommandExample extends Sprite

      {

            private var bgColor:uint = 0xFFCC00;

            private var size:uint = 100;

 

            public function FSCommandExample()

            {

                  fscommand("fullscreen", "true");

                  fscommand("allowscale", "false");

                  draw();

            }

 

            private function clickHandler(event:MouseEvent):void

            {

                  fscommand("quit");

                  trace("clickHandler");

            }

 

            private function draw():void

            {

                  var child:Sprite = new Sprite();

                  child.graphics.beginFill(bgColor);

                  child.graphics.drawRect(0, 0, size, size);

                  child.graphics.endFill();

                  child.buttonMode = true;

                  addEventListener(MouseEvent.CLICK, clickHandler);

 

                  var label:TextField = new TextField();

                  label.text = "quit";

                  label.selectable = false;

                  label.mouseEnabled = false;

                  child.addChild(label);

 

                  addChild(child);

            }

      }

}

 


منبع : ActionScript 3.0 Language Reference

ترجمه : شایان اصیل