PDA

View Full Version : غیر فعال بودن javascript در هنگام استفاده ازAjax در مرورگر کاربر



mohsen_zelzela00
سه شنبه 03 فروردین 1389, 12:24 عصر
با سلام

وقتی که کاربری javaScript رو در مرورگر خودش غیرفعال کنه و ما در سایت خودمان از کدهای Ajax استفاده کردیم خب اون کاربر نمی تونه از سایت ما استفاده کنه .
ما چگونه می تونیم تشخیص بدیم که کاربر javascript رو غیر فعال کرده و همان کاری رو که بدون postback با استفاده از javascript انجام میدادیم با استفاده از vb یا C# و با PostBack انجام بدیم تا کاربر حداقل بتواند از سایت ما استفاده کند

ممنون

alireza_s_84
سه شنبه 03 فروردین 1389, 13:26 عصر
با سلام

وقتی که کاربری javaScript رو در مرورگر خودش غیرفعال کنه و ما در سایت خودمان از کدهای Ajax استفاده کردیم خب اون کاربر نمی تونه از سایت ما استفاده کنه .
ما چگونه می تونیم تشخیص بدیم که کاربر javascript رو غیر فعال کرده و همان کاری رو که بدون postback با استفاده از javascript انجام میدادیم با استفاده از vb یا C#‎ و با PostBack انجام بدیم تا کاربر حداقل بتواند از سایت ما استفاده کند

ممنون
اولا شما باید جوری طراحی کنه که وب سایتت وابسته به جاوا نباشه یعنی اگر یک دکمه باعث PostBack میشه شما توی رویداد اون دکمه بنویس:

onclick="DoPostBack();return false;"
با این کد اگر جاوا غیر فعال باشه PostBack صفحه بطور عادی صورت میگیره و هیچ ایرادی در کارت بوجود نمیاد و کاربرتون رو از دست نمیدید.
ثانیا یک تگ <noscript> هم وجود داره که تنها زمانیکه جاوااسکریپت غیرفعال باشه محتویاتش نمایش داده میشه:
مثلا شما اگر منویی داری که با جاوا اسکریپت نمایش داده میشه اگر جاوا غیر فعال باشه شما در یک تگ noscript یک منویی رو قرار میدی که بدون جاوا کار میکنه بدین تیرتیب شما استاندارد سازی کردی یعنی صفحه شما وابستگی به اسکریپت نداره.
اگر قراره محتویات یک dropdown لیست توسط ایجکس پر بشه شما باید در یک تگ noscript بغل همون dropdownlist یک دکمه تعبیه کنی که اگر جاوا غیر فعال بود کاربر با انتخاب یک آیتم و کلیک روی اون دکمه محتویات dropdown با یک postback پر بشه.
برای بقیه المانها هم همینطوری عمل کنی هیچ نیازی به نگرانی از دست دادن کاربر به دلیل غیرفعال بودن جاوا نخواهی داشت.
موفق باشید

mohsen_zelzela00
سه شنبه 03 فروردین 1389, 13:41 عصر
اولا شما باید جوری طراحی کنه که وب سایتت وابسته به جاوا نباشه یعنی اگر یک دکمه باعث PostBack میشه شما توی رویداد اون دکمه بنویس:

onclick="DoPostBack();return false;"با این کد اگر جاوا غیر فعال باشه PostBack صفحه بطور عادی صورت میگیره و هیچ ایرادی در کارت بوجود نمیاد و کاربرتون رو از دست نمیدید.
ثانیا یک تگ <noscript> هم وجود داره که تنها زمانیکه جاوااسکریپت غیرفعال باشه محتویاتش نمایش داده میشه:
مثلا شما اگر منویی داری که با جاوا اسکریپت نمایش داده میشه اگر جاوا غیر فعال باشه شما در یک تگ noscript یک منویی رو قرار میدی که بدون جاوا کار میکنه بدین تیرتیب شما استاندارد سازی کردی یعنی صفحه شما وابستگی به اسکریپت نداره.
اگر قراره محتویات یک dropdown لیست توسط ایجکس پر بشه شما باید در یک تگ noscript بغل همون dropdownlist یک دکمه تعبیه کنی که اگر جاوا غیر فعال بود کاربر با انتخاب یک آیتم و کلیک روی اون دکمه محتویات dropdown با یک postback پر بشه.
برای بقیه المانها هم همینطوری عمل کنی هیچ نیازی به نگرانی از دست دادن کاربر به دلیل غیرفعال بودن جاوا نخواهی داشت.
موفق باشید

دوست عزیز من می خواهم این کار رو برای سوالی که در آدرس زیر مطرح کردم انجام بدم
http://barnamenevis.org/forum/showthread.php?t=210961
ممنون میشم بیشتر راهنمایی کنید

mehdi.mousavi
سه شنبه 03 فروردین 1389, 13:43 عصر
با سلام وقتی که کاربری javaScript رو در مرورگر خودش غیرفعال کنه و ما در سایت خودمان از کدهای Ajax استفاده کردیم خب اون کاربر نمی تونه از سایت ما استفاده کنه . ما چگونه می تونیم تشخیص بدیم که کاربر javascript رو غیر فعال کرده و همان کاری رو که بدون postback با استفاده از javascript انجام میدادیم با استفاده از vb یا C#‎ و با PostBack انجام بدیم تا کاربر حداقل بتواند از سایت ما استفاده کند ممنون

سلام.
این سوال ساده ای هستش، اما پاسخ به اون و پیاده سازی چنین چیزی، دشواره! برای اینکه متوجه disable/enable بودن JavaScript سمت Client بشید، میتونید به این روش عمل (http://weblogs.asp.net/alessandro/archive/2007/10/04/rich-ajax-applications-that-do-not-break-if-javascript-is-disabled.aspx) کنید. اما بعد اینکه این تشخیص رو دادید، چند راه دارید (به فرض disable بودن JavaScript): یا یک نسخه Server-Side از سایت داشته باشید که User رو به اون Redirect کنید و کارکرد صفحه رو بطور کلی تغییر بدید تا بدون استفاده از JavaScript بتونید Content مناسب رو تولید کنید، یا برنامه رو خیلی خوب و سرسنگین خاتمه بدید و به کاربر توضیح بدید که این برنامه اینطوری طراحی شده و شما باید توی Browser اتون JavaScript رو Enable کنید. من این دو روش رو میپسندم...

روش سوم هم اینه که کد رو برای هر دو حالت بنویسید، که البته، اولش ساده بنظر میرسه، اما در واقعیت اینکار واقعا دشواره، بخصوص برای برنامه های Rich Ajax App ...

موفق باشید.

mohsen_zelzela00
دوشنبه 09 فروردین 1389, 15:15 عصر
سلام.
این سوال ساده ای هستش، اما پاسخ به اون و پیاده سازی چنین چیزی، دشواره! برای اینکه متوجه disable/enable بودن JavaScript سمت Client بشید، میتونید به این روش عمل (http://weblogs.ASP.NET/alessandro/archive/2007/10/04/rich-ajax-applications-that-do-not-break-if-javascript-is-disabled.aspx) کنید. اما بعد اینکه این تشخیص رو دادید، چند راه دارید (به فرض disable بودن JavaScript): یا یک نسخه Server-Side از سایت داشته باشید که User رو به اون Redirect کنید و کارکرد صفحه رو بطور کلی تغییر بدید تا بدون استفاده از JavaScript بتونید Content مناسب رو تولید کنید، یا برنامه رو خیلی خوب و سرسنگین خاتمه بدید و به کاربر توضیح بدید که این برنامه اینطوری طراحی شده و شما باید توی Browser اتون JavaScript رو Enable کنید. من این دو روش رو میپسندم...

روش سوم هم اینه که کد رو برای هر دو حالت بنویسید، که البته، اولش ساده بنظر میرسه، اما در واقعیت اینکار واقعا دشواره، بخصوص برای برنامه های Rich Ajax App ...

موفق باشید.

ببخشید در موذد لینکی که داده اید من اونو خوندم ولی باز هم موقع پیاده سازی نتونستم اونو پیاده کنم.

در مورد روش سومی که فرمودید من الان همه کارهام رو با postback دارم انجام می دم و حالا که بعضی از قسمت ها رو دارم با Ajax پیاده سازی می کنم (یعنی کد با postback اونو دارم)


ممنون می شم اگه بتونید منو بیشتر راهنمایی کنید

mehdi.mousavi
دوشنبه 09 فروردین 1389, 16:26 عصر
ببخشید در موذد لینکی که داده اید من اونو خوندم ولی باز هم موقع پیاده سازی نتونستم اونو پیاده کنم. در مورد روش سومی که فرمودید من الان همه کارهام رو با postback دارم انجام می دم و حالا که بعضی از قسمت ها رو دارم با Ajax پیاده سازی می کنم (یعنی کد با postback اونو دارم) ممنون می شم اگه بتونید منو بیشتر راهنمایی کنید

سلام.
ببینید. هدف ما چیه؟ اینکه سمت سرور متوجه بشیم که آیا JavaScript رو کاربر disable کرده یا خیر. برای اینکار، میتونیم به همون روشهای شکننده ای که هممون باهاش آشناییم (مثل استفاده از HttpBrowserCapabilities) متوصل بشیم، اما خوب، اونها واقعا بهمون کمک نمیکنن، چون فقط بهمون حداکثر نسخه ECMA Script ای رو که میتونه مرورگر پشتیبانی کنه، میگه. پس باید راه حل بهتری برای این مساله وجود داشته باشه. لینک فوق، این راه حل رو پیشنهاد داده. میگه توی اولین صفحه اینو بذارید:

<script type="text/javascript">
window.location.href='http://weblogs.ASP.NET/Default.aspx?supportsjs=true';
</script>

پس اگر کاربر پردازش JS رو disable نکرده باشه، کنترل دست Default.aspx می افته در حالیکه پارامتر supportsjs اون true هستش. اما خوب، اگر disable بود چیکار کنیم؟ میگه میتونیم با این meta-tag بفرستیم کاربر رو به Default.aspx اما اینبار با پارامتر supportsjs که false هستش:

<meta http-equiv="refresh"
content="0;url=http://weblogs.ASP.NET/Default.aspx?supportsjs=false" />

به همین سادگی. فقط باید اطمینان حاصل کنید که این کد فقط یکبار هنگام Login کردن به سیستم اجرا بشه، و نتیجه توی Session یا هر جای دیگه که مایل بودید نگهداری بشه و برای دفعات بعدی با رجوع به این متغیر، متوجه میشیم که کاربر JavaScript رو disable کرده یا خیر.

اما بعد از مدتی، توی Update بعدی خودش، عنوان کرده که این روش نیز پاسخگو نیست. چرا که Browser ها امکان disable کردن meta-tag ها رو هم عموما میدن و در نتیجه این روش نیز پاسخگو نیست. برای همین، کدی نوشته که بدون استفاده از meta-tag مزبور، بتونه صفحه رو redirect کنه... بقیه اش هم که مشخصه.

پاورقی: دو نفر از 4 نفر، پاسخ قبلی منو به این تاپیک "غیر مفید" ارزیابی کرده اند. من نمیدونم کجاش غیر مفید بوده، شاید اینکه گفتم دو نسخه متفاوت برای App بسازید رو غیر مفید دونستن، شاید هم دشوار بودن انجام این عمل در Rich Ajax App ها... اما جالبه که بدونید، Google هم با این همه عظمت، توی خیلی از Web App هاش، از این مساله پشتیبانی نمیکنه. بعبارت دیگه، حتی سرسنگین به کاربر پیام نمیده که JavaScript ات disable هستش و نمیتونی کار کنی. براحتی این عده از کاربران رو نادیده میگیره. بعنوان نمونه، تصویری که ضمیمه کردم رو نگاه کنید. صفحه Google Docs. لود شده، اما همونطور که میبینید چیزی رو صفحه نیست و هیچ فعالیتی نیز انجام نمیشه و پیام loading رو صفحه نقش بسته و همینطور هم میمونه...

به اعتقاد من، شما نباید به این فکر کنید که چی میشه اگر JavaScript اش disable بود و کاربر رو از دست میدم. چه کسانی ممکنه اینو توی مرورگرهاشون disable کنن؟ فقط افرادیکه دنبال هدفهای خاصی هستن. و الا بطور پیش فرض، توی همه مرورگرها، این قابلیت enable هستش. من هنوزم بر این اعتقادم که فقط کافیه کاربر رو از این مساله مطلع کنید و خیلی خوب و شایسته، به برنامه خاتمه بدید.