۱۳۸۷/۱۰/۰۱

تشخيص غيرفعال بودن JavaScript در مرورگر كاربر


اكثر كنترل‌هاي تعيين اعتبار ASP.Net بر اساس جاوا اسكريپت كار مي‌كنند (مانند RangeValidator و امثال آن). حال اگر كاربري افزونه no script فايرفاكس را نصب كرده بود چه بايد كرد؟
با استفاده از اين افزونه، اين نوع كنترل‌ها از كار خواهند افتاد (چون ديگر كدهاي جاوا اسكريپتي آنها اجرا نخواهند شد).
خوشبختانه براي بررسي صحت عملكرد اين كنترل‌ها در ASP.Net امكان بررسي خاصيت Page.IsValid نيز وجود دارد كه در ادامه به آن خواهيم پرداخت.

صفحه‌ي بسيار ساده ASP.Net زير را در نظر بگيريد:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="testWebForms87.WebForm3" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtData" runat="server"></asp:TextBox>
<asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="txtData"
ErrorMessage="لطفا يك عدد وارد كنيد" MaximumValue="100000" MinimumValue="0" SetFocusOnError="True"
Type="Integer"></asp:RangeValidator>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtData"
ErrorMessage="لطفا مقداري را وارد نمائيد" SetFocusOnError="True"></asp:RequiredFieldValidator>
<br />
<asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" Text="Submit" />
<br />
<asp:Label ID="lblValue" runat="server"></asp:Label>
</div>
</form>
</body>
</html>

يكبار اين صفحه را با فعال كردن افزونه ياد شده بررسي كنيد.
سپس براي بررسي سمت سرور عملكرد كنترل‌هاي تعيين اعتبار در ASP.Net مي‌توان به صورت زير عملكرد:

        protected void btnSubmit_Click(object sender, EventArgs e)
{
if (btnSubmit.CausesValidation)
{
// Validate the Page
Page.Validate();

// Ensure Page is Valid
if (!Page.IsValid)
{
lblValue.Text = "لطفا جاوا اسكريپت را در مرورگر خود فعال نمائيد";
return;
}
}

lblValue.Text = txtData.Text;
}

ابتدا بررسي مي‌شود كه آيا دكمه مورد استفاده جهت ارسال مقادير صفحه به سرور سبب فعال شدن كنترل‌هاي تعيين اعتبار مي‌شود؟ اگر اينطور بود، سپس صفحه تعيين اعتبار شده و با استفاده از مقدار خاصيت Page.IsValid مشخص مي‌شود كه آيا اين عمليات به درستي صورت گرفته است يا خير.

راه ديگر بررسي غيرفعال بودن جاوا اسكريپت در يك صفحه استفاده از روش سنتي تگ noscript است:

<noscript>
<meta http-equiv="refresh" content="0;url=http://www.google.com">
</noscript>

در اين مثال اگر جاوا اسكريپت غيرفعال باشد كاربر به گوگل هدايت خواهد شد. البته بهتر است يك صفحه‌ي خطاي از پيش تعيين شده براي اين مورد در نظر گرفته شود.

در پايان بايد خاطر نشان كرد كه هيچگاه به كنترل‌هاي تعيين اعتبار سمت كاربر اطمينان نكنيد و حتما يا از روش فوق استفاده نمائيد، يا در روال submit صفحه به سرور، يكبار ديگر داده‌ها را به صورت دستي نيز بررسي كنيد. براي مثال اگر كاربر قرار است آدرس ايميلي را وارد كند، حتما يكبار ديگر با استفاده از regular expressions ، در سمت سرور نيز عبارت ورودي را بررسي كنيد.