ASP.NET ، مجموعه اي کامل از ابزارهاي برنامه نويسي را بمنظور ايجاد برنامه هاي وب که بر روي سرويس دهنده اجراء مي گردند، ارائه نموده است . ممکن است اين سوال مطرح گردد که ضرورت استفاده از اسکريپت ها بر روي سرويس گيرنده چيست و چرا مي بايست از آنان در برنامه هاي وب استفاده گردد . اسکريپت ها ، امکان دستيابي مستقيم به مرورگر سرويس گيرنده را فراهم نموده و مي توان واکنش لازم در خصوص رويدادهائي که در سطح مرورگر سرويس گيرنده،محقق مي گردند را بلافاصله و بدون ضرورت يک Post back به سرويس دهنده ، انجام داد. با بکارگيري اسکريپت ها ، عملياتي را مي توان انجام داد که امکان اجراي آنان از طريق سرويس دهنده ، وجود نخواهد داشت . بعنوان نمونه مي توان به موارد زير اشاره نمود :
• کنترل پنجره مرورگر . براي کنترل مرورگر سرويس گيرنده ، نمي توان از کدهاي نوشته شده سمت سرويس گيرنده ، استفاده نمود . باز نمودن پنجره ، focus نمودن بر روي يک پنجره ، حرکت بين فريم ها ، حرکت بين history و ساير عمليات مشابه مي بايست از طريق اسکريپت هاي سمت سرويس گيرنده ، انجام شود.
• پاسخ فوري به رويدادهائي نظير Mouse-over ، کدهاي نوشته شده سمت سرويس دهنده ، قادر به پاسخگوئي به رويدادها ، صرفا" پس از post back صفحه براي سرويس دهنده مي باشند . کدهاي نوشته شده سمت سرويس گيرنده ، قادر به پاسخگوئي به رويدادهاي محقق شده در صفحه بلافاصله پس از تحقق رويدادها ، خواهند بود .
• اجراي برنامه سرويس گيرنده پست الکترونيکي . در اين رابطه مي توان با استفاده از پروتکل mailto ، يک لينک را بصورت زير ايجاد نمود :
Mailto Protocol |
<A href="mailto:Info@Srco.ir?Subject=Send mail from client &Body= This email sent from client ." > |
• بخش هاي متفاوت پيام ، با استفاده از کليدهائي که توسط پروتکل mailto حمايت مي گردند ، مشخص مي شود . کليدهاي فوق ، بعنوان يک query String بوده و توسط علامت & ( ampersands ) ، از يکديگر متمايز مي گردند . شکل عمومي پروتکل mailto بصورت زير است :
mailto protocl syntax |
mailto:address[?key=string][&key=setting] |
• کليدهاي حمايت شده توسط mailto عبارتند از : SUBJECT , CC , BCC ,BODY . پروتکل mailto براي ارسال فايل هاي ضميمه ، کليدي را ارائه ننموده است .
قبل از استفاده از اسکريپت ها ، لازم است به سه نکته مهم در رابطه با آنان دقت شود :
• تمامي مرورگرها ، حمايت يکسان و مشابهي را از اسکريپت ها ارائه نمي نمايند .
• مرورگر اينترنت مايکروسافت (IE) ، صرفا" از VBScript حمايت نموده و ساير مرورگرها از آن حمايت نمي نمايند .
• استفاده از اسکريپت ها ، چالش هاي امنيتي خاص خود را بدنبال خواهد داشت .
با توجه به اينکه تمامي مرورگر ، از اسکريپت ها حمايت نمي نمايند ، مي بايست قبل از نمايش صفحاتي که شامل اسکريپت هاي سمت سرويس گيرنده مي باشند ، توانائي آنان بمنظور تفسير وو اجراي اسکريپت ها ، بررسي گردد . کد زير ( روتين مربوط به رويداد Page_Load ) ، بررسي لازم در خصوص توانمندي يک مرورگر در جهت حمايت از اسکريپت ها را انجام و در صورتيکه مرورگر کاربر داراي قابليت هاي لازم بمنظور استفاده از اسکريپت ها نباشد ، کاربر به صفحاتي ديگر متناسب با شرايط موجود ، هدايت مي گردد.
Check browser Support Scripts |
Private Sub Page_Load ( ByVal Sender As System.Object , &_ByVal e As System.EventArgs ) Handles Mybase.Load If Request.Browser.VBScript Then Response.Redirect("VBScript.htm") ElseIF Request.Browser.JavaScript Then Response.Redirect (JScripts.htm") Else Response.Redirect("Noscript.htm") End Sub |
يکي از نکات مهم در رابطه با استفاده از اسکريپت ها ، چالش هاي امنيتي مرتبط با آنان مي باشد . در اين رابطه دو حالت متفاوت مي تواند وجود داشته باشد :
• استفاده از اسکريپت ها ، ايمن نمي باشد ، چراکه امکان مشاهده و يا تکثير آنان توسط کاربران ، وجود خواهد داشت .
• اسکريپت ها ، داراي استعداد لازم بمنظور توزيع و نشر ويروس هاي کامپيوتري بوده و همين امر باعث مي گردد که برخي کاربران ،امکان Scripting درمرورگر خود را غيرفعال نمايند.
خصلت VBScript و JavaScript مربوط به شي Browser ، حتي در صورتيکه Scripting غيرفعال باشد ، مقدار True را برمي گرداند . بمنظور بررسي وضعيت Scripting در يک مرورگر ( فعال و يا غير فعال بودن ) ، مي توان با اجراي يک اسکريپت نمونه ، از وضعيت فوق ، آگاه و متناسب با آن عمليات مورد نظر را انجام داد .تگ هاي HTML زير ، يک اسکريپت را اجراء و در صورت فعال بودن Scripting ، کاربر به صفحه اي خاص ( Scripts.aspx) ، هدايت مي گردد . در صورتيکه ويژگي فوق ، غير فعال شده باشد ، پيامي مبني بر غيرفعال بودن پتانسيل فوق ، نمايش داده مي شود .
Check Scripting status |
<html> <script> window.navigate("scripts.aspx") </script> <head> <title>Scripts</title> </head> <Body> <h2> Scripting is turned off .</h2> </Body> </html> |
انتخاب يک زبان اسکريپت
اسکريپت هاي سمت سرويس گيرنده ،با استفاده از VBScript,JScript و يا جاوااسکريپت نوشته مي گردند . زبان هاي اسکريپت هاي داراي تفاوت هاي مشهودي نسبت به زبان هاي کمپايل شده مي باشند :
• زبان هاي اسکريپت ترجمه نمي گردند. اين نوع زبان ها در زمان اجراء توسط مرورگر تفسير و در ادامه اجراء خواهند شد .
• کليد واژه هاي اسکريپت ، زيرمجموعه اي ايمن از زبان هاي مادر خود مي باشند . اسکريپت ها ، امکان ايجاد و يا حذف فايل هائي را بر روي فضاي ذخيره سازي کاربر ( مثلا" هارد ديسک ) و يا انجام عملياتي که باعث بروز اختلال در کامپيوتر کاربر مي گردد ، را نخواهد داد .
VBScript و JScript تقريبا" معادل يکديگر مي باشند . تفاوت عمده ،در گرامر و کليد واژه هاي آنان مي باشد . برنامه نويسان ويژوال سي شارپ ، تمايل بيشتري به استفاده از Jscript را دارند ،چراکه Jscript شباهت زيادي به زبان سي دارد. برنامه نويسان ويژوال بيسيک ، تمايل بيشتري به استفاده از VBScript دارند ، چراکه VBScript شباهت زيادي به ويژوال بيسيک دارد . مرورگر IE ، صرفا" VBScript را حمايت نموده و در صورتيکه ، ضروري است که برنامه بر روي ساير مرورگرها نيز کار کند ،مي بايست از JScript استفاده گردد .
آشنائي با DOM
DOM از کلمات Document Object Model ، اقتباس و اشياء ارائه شده توسط مرورگر براي Scripting را ايجاد مي نمايد . با استفاده از اشياء ايجاد شده ، امکان کنترل پنجره مرورگر ، صفحه جاري و اشياء موجود در يک صفحه ، فراهم مي گردد.پرداختن به اشياء DOM و نحوه استفاده از آنان در حوصله اين مقاله نبوده و مي توان در اين رابطه از مقاله : DOM چيست ، استفاده نمود.
افزودن اسکريپت هاي Inline
صفحات وب مي توانند از اسکريپت هاي Inline بعنوان بخشي از محتويات خود و يا بعنوان يک روتين که در پاسخ به تحقق رويدادي خاص ، اجراء مي گردند، استفاده نمايند. اسکريپت هاي Inline ، بلافاصله پس از برخورد مرورگر با آنان ، اجراء خواهند شد. در صورتيکه يک اسکريپت Inline به يک عنصر موجود بر روي صفحه مراجعه مي نمايد ، عنصر فوق ، مي بايست قبل از اسکريپتي که به آن مراجعه مي نمايد ، استفاده گردد.تگ هاي HTML زير ، دو Text Box را نمايش و با استفاده از يک اسکريپت ، Cursor را به Text Box دوم هدايت ، مي نمايد .
Use a Script |
<HTML> <Body Language= "Vbscript" > <form id="Form1" method="post" runat="server"> <P> <asp:TextBox id="txtFirstName" Runat="server"></asp:TextBox> </P> <P> <asp:TextBox id="txtLastName" Runat="server"></asp:TextBox> </P> <Script> Window.document.all ( "txtLastName").focus( ) </Script> </form> </body> </HTML> |
از اسکريپت هاي Inline ، همچنين مي توان بعنوان خصلت عناصر HTML بمنظور انجام عملياتي خاص ، استفاده نمود . ( نظير کنترل HTML Button ) .تگ هاي HTML زير يک Button راايجاد که باعث فعال نمودن يک صفحه Help در پنجره اي جديد مي گردد
Inline Script as attribute of HTML elements |
<Button id="butHelp" onCLick="Window.open('help.aspx' ,'help','heigh=200 , width=300')" Help </button> |
اسکريپت فوق ، مستقل از زبان اسکريپت بوده مي باشد( دستور فوق ، در صورتيکه مقدار خصلت Language مربوط به عنصر <body> ، به مقدار VBScript و يا Jscript مقداردهي نشده باشد، نيز معتبر بوده و اجراء خواهد شد). براي استفاده از يک زبان اسکريپت ( بجزء مقداري که بهمراه عنصر <body> مشخص شده است ) ، مي بايست از خصلت Language مربوط به عنصر <Script> ، براي مشخص نمودن زبان مورد نظر استفاده نمود . کد زير ، نمونه اي در اين رابطه را نشان مي دهد :
Using element's language attribute |
<HTML> <Script Language="vbscript"> For i = 1 to 6 document.write("<h"& i & ">") document.write("H" & i ) document.write( "</h" & i & "><br>") Next </Script> </HTML> |
پاسخ به رويدادها با استفاده از روتين هاي نوشته شده توسط اسکريپت ها
با استفاده از اسکريپت ها ، مي توان روتين هائي را بمنظور پاسخگوئي در مقابل رويدادهاي صفحه ، تعريف نمود( لود شدن پنجره ، کليک نمودن يک Button ، حرکت موس بر روي اشياء موجود بر روي صفحه ) . براي ايجاد يک روتين اسکريپت پاسخگو در مقابل يک رويداد ، مراحل زير را دنبال مي نمائيم :
• با استفاده از ويژوال استوديو دات نت ، صفحه اي را که قصد استفاده از اسکريپت هاي سمت سرويس گيرنده در آن وجود دارد را ايجاد مي نمائيم . صفحه فوق ، مي تواند يک فرم وب ( فايلي با انشعاب aspx ) و يا يک صفحه HTML ( فايلي با انشعاب htm ) باشد .
• به وضعيت نمايش HTML در رابطه با صفحه ، سوئيچ مي نمائيم .
• با استفاده از ليست Drop-Down ( قسمت سمت چپ بالاي صفحه ) شي مورد نظري را که قصد اضافه نمودن يک رويداد مرتبط با آن وجود دارد راانتخاب مي نمائيم :
• با استفاده از Drop-Down ( قسمت سمت راست بالاي صفحه ) ، رويداد مرتباط با شي انتخاب شده را مشخص مي نمائيم :
• در ادامه ويژوال استوديو ، يک بلاک اسکريپت ايجاد مي نمايد (يک روتين رويداد خالي )
A Script Block |
<Script id=ClientEventHandlersVBS Language=vbscript> <!-- Sub butRunScript_onmouseover End Sub --> </Script> |
کد موجود در روتين رويداد، پس از بروز رويداد در صفحه، اجراء خواهند شد. کد زير ، باعث تغيير شکل موس بصورت علامت دست ، مي گردد(زمانيکه کاربر موس را از روي Button عبور مي دهد ).
Switch mouse cursor to hand symbol |
Sub butRunScript_onmouseover butRunScript.Style.Cursor = "hand" End Sub |
با استفاده از روتين هاي مرتبط با رويدادها ي سمت سرويس گيرنده ، مي توان مجموعه اي گسترده از رويدادها را تشخيص داد. (فشردن کليدها ، رويدادهاي حرکت موس بر روي اشياء ، کليک ها ، لودها ، Unload ها ) . برخلاف رويدادهاي سمت سرويس دهنده ، رويدادهاي سمت سرويس گيرنده آرگومان ها را مستقيما" ارائه نمي نمايند . اين نوع از رويدادها در مقابل ، از متد event مربوط به شي window بمنظور دريافت مقادير مورد نظر، استفاده مي نمايند. کد زير ، رويداد مرتبط با mousemove بوده که باعث نمايش مختصات Cursor در Status bar مربوط به مرورگر، مي شود.
Display coordinates of cursor |
Sub document_onmousemove window.status = window.event.clientX & , & window.event.ClentY End Sub |
کد موجود در روتين هاي رويداد سمت سرويس گيرنده ، قادر به دريافت و تنظيم مقادير نمايش داده شده در کنترل هاي سرويس دهنده و HTML موجود بر روي يک صفحه نيز مي باشند . بدين ترتيب ، امکان دريافت داده از کاربر و ارائه پاسخ لازم بدون نياز به يک Post back ،فراهم مي گردد.