اسکريپت های سمت سرويس گيرنده در برنامه های وب

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 ،فراهم می گردد.