PDA

View Full Version : تشخیص مرورگر



smrb59
چهارشنبه 18 آذر 1388, 14:26 عصر
من میخوام با توجه به اینکه مرورگر کاربر فایرفاکس باشه یا اینترنت اکسپلورر سی اس اس های متفاوتی رو روی یه دیو اعمال کنم حالا باید چکار کنم.؟؟؟؟؟؟؟؟؟

eAmin
چهارشنبه 18 آذر 1388, 20:03 عصر
نیازی نیست کاری انجام بدید، فقط کافیه کمی جستجو کنید!
http://barnamenevis.org/forum/showthread.php?t=130941

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

afshin9032
سه شنبه 24 آذر 1388, 15:11 عصر
يك كار ساده مي شه كرد :
استفاده از document.all - اگر مقداري غير از NULL برگرداند نشان مي دهد كه مرورگر Engine آن IE مي باشد و در غير اينصورت از Engine ديگري مثل Mozilla و .... استفاده مي كند
طرز استفاده :



<script type="text/javascript">
if(document.all)
{
alert("IE Engine");
} else {
alert("Other Engine");
}
</script>

Exception
سه شنبه 24 آذر 1388, 19:54 عصر
يك كار ساده مي شه كرد :
استفاده از document.all - اگر مقداري غير از NULL برگرداند نشان مي دهد كه مرورگر Engine آن IE مي باشد و در غير اينصورت از Engine ديگري مثل Mozilla و .... استفاده مي كند
طرز استفاده :



<script type="text/javascript">
if(document.all)
{
alert("IE Engine");
} else {
alert("Other Engine");
}
</script>


این روش خوبی نیست. اپرا هم document.all رو ساپورت میکنه. مطمین ترین راه استفاده از navigator.userAgent هست.
مثلا این تکه کد از jQuery هست که نوع مرورگر رو مشخص میکنه:

var userAgent = navigator.userAgent.toLowerCase();

// Figure out what browser is being used
jQuery.browser = {
version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
safari: /webkit/.test( userAgent ),
opera: /opera/.test( userAgent ),
msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
};

afshin9032
سه شنبه 24 آذر 1388, 20:12 عصر
این روش خوبی نیست. اپرا هم document.all رو ساپورت میکنه. مطمین ترین راه استفاده از navigator.userAgent هست.
مثلا این تکه کد از jQuery هست که نوع مرورگر رو مشخص میکنه:

var userAgent = navigator.userAgent.toLowerCase();

// Figure out what browser is being used
jQuery.browser = {
version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
safari: /webkit/.test( userAgent ),
opera: /opera/.test( userAgent ),
msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
};
ذكر كردم يك روش ساده است نه يك روش حرفه اي

h.emamie
سه شنبه 24 آذر 1388, 22:02 عصر
بهترين كار به جاي اينكه بيايم از جاوااسكريپت استفاده كنيم استفاده از هك هاي سي اس اس است ، به كد زير توجه كنيد :




<link type="text/css" rel="stylesheet" media="screen" href="./css/style.css" />

<!--[if IE]> <link href="./css/ie_only.css" rel="stylesheet" type="text/css"> <![endif]-->

<!--[if IE 6]> <link href="./css/ie6_only.css" rel="stylesheet" type="text/css"> <![endif]-->



خط اول آدرس فايل css عمومي سايت هست كه براساس firefox بايد تنظيم بشه و همه style ها رو داخلش بياريد .

حالا اگر وقتي سايت رو در IE مشاهده كرديد ، قسمتي داراي مشكل بود ، كد تصحيح آن را در فايل مربوط به آدرس دوم يعني ie_only.css بايد وارد كنيد (توجه داشته باشيد كه فقط كد همان قسمت كافي است و نياز به بازنويسي تمام كدها نيست) .

اگر هم مشكلتون فقط در IE6 باشه در فايل سوم مي گزاريد .

در واقع فايل اول هميشه فراخواني مي شود ولي فايل دوم فقط در صورتي كه IE باشه فراخواني مي شه و فايل سوم نيز فقط در صورتي كه IE6 باشه .

اميدوارم سودمند بوده باشد .

Exception
سه شنبه 24 آذر 1388, 22:04 عصر
بهترين كار به جاي اينكه بيايم از جاوااسكريپت استفاده كنيم استفاده از هك هاي سي اس اس است ، به كد زير توجه كنيد :




<link type="text/css" rel="stylesheet" media="screen" href="./css/style.css" />

<!--[if IE]> <link href="./css/ie_only.css" rel="stylesheet" type="text/css"> <![endif]-->

<!--[if IE 6]> <link href="./css/ie6_only.css" rel="stylesheet" type="text/css"> <![endif]-->

خط اول آدرس فايل css عمومي سايت هست كه براساس firefox بايد تنظيم بشه و همه style ها رو داخلش بياريد .

حالا اگر وقتي سايت رو در IE مشاهده كرديد ، قسمتي داراي مشكل بود ، كد تصحيح آن را در فايل مربوط به آدرس دوم يعني ie_only.css بايد وارد كنيد (توجه داشته باشيد كه فقط كد همان قسمت كافي است و نياز به بازنويسي تمام كدها نيست) .

اگر هم مشكلتون فقط در IE6 باشه در فايل سوم مي گزاريد .

در واقع فايل اول هميشه فراخواني مي شود ولي فايل دوم فقط در صورتي كه IE باشه فراخواني مي شه و فايل سوم نيز فقط در صورتي كه IE6 باشه .

اميدوارم سودمند بوده باشد .
در صورتیکه فقط تشخیص IE (ورژن های مختلف) و غیر IE از هم هدف باشه، بهترین روش همینه. اما اگر بخواین برای بقیه هم تشخیص بدین، بجز جاوااسکریپت، راه دیگه (سمت کلاینت) نداره.
البته با توجه به سوال در اینجا، بهترین راه همینه که شما گفتین
در همین مورد این رو هم ببینید: http://hasheminezhad.com/condcom

h.emamie
سه شنبه 24 آذر 1388, 22:36 عصر
به نظر من بازم استفاده از جاوا اسكريپت براي اعمال style اشتباه است ،

اولا : باعث كند شدن لود صفحه مي شه
دوما : اگر javascript مرورگر غير فعال باشه چيكار كنيم .

خب حالا فرض كنيم تمام مرورگرها براي ما مهم هستند و بايد سايت در همه آن ها درست ديده بشود براي اين منظور بهترين راه حل استفاده از زبان سمت سرور است . همه زبان هاي سمت سرور اطلاعات (user agent) مرورگري كه درخواست ارسال نموده را در اختيار برنامه نويسان قرار مي دهند ، مثلا در php ميشه با $_SERVER["HTTP_USER_AGENT"] مقدار user agent مرورگر كه داخلش اطلاعات كاملي در رابطه با نوع مرورگر و نسخه آن است را گرفت و سپس با استفاده از آن همان ابتدا فايل css صحيح را براي كاربر ارسال كرد ، يعني در اين روش بايد براي هر مرورگري يك فايل css ايجاد كنيم ، و در هنگام درخواست فايل صحيح را ارسال كنيم .

سايت هاي بزرگي مثل گوگل و ياهو هم مطمئنا از اين روش استفاده مي كنند .

afshin9032
چهارشنبه 25 آذر 1388, 00:24 صبح
به نظر من بازم استفاده از جاوا اسكريپت براي اعمال style اشتباه است ،

اولا : باعث كند شدن لود صفحه مي شه
دوما : اگر javascript مرورگر غير فعال باشه چيكار كنيم .

خب حالا فرض كنيم تمام مرورگرها براي ما مهم هستند و بايد سايت در همه آن ها درست ديده بشود براي اين منظور بهترين راه حل استفاده از زبان سمت سرور است . همه زبان هاي سمت سرور اطلاعات (user agent) مرورگري كه درخواست ارسال نموده را در اختيار برنامه نويسان قرار مي دهند ، مثلا در php ميشه با $_SERVER["HTTP_USER_AGENT"] مقدار user agent مرورگر كه داخلش اطلاعات كاملي در رابطه با نوع مرورگر و نسخه آن است را گرفت و سپس با استفاده از آن همان ابتدا فايل css صحيح را براي كاربر ارسال كرد ، يعني در اين روش بايد براي هر مرورگري يك فايل css ايجاد كنيم ، و در هنگام درخواست فايل صحيح را ارسال كنيم .

سايت هاي بزرگي مثل گوگل و ياهو هم مطمئنا از اين روش استفاده مي كنند .

اگر از جاوااسكريپت بعد از لود صفحه استفاده كنه هيچ تاثيري در بارگذاري صفحه نداره
برعكس بهترين روش براي سريعتر شدن سايت است (همان تكنولوژي web2)
چون لازم نيست كه براي يك استايل دادن كل سايت رو از دوباره بارگذاري كن
اگر به gmail و yahoo mail هم توجه كني اونا هم از جاوااسكرپت براي تغيير css به دفعات استفاده كرده انذ البته تركيبي از هر دو
class ها رو با css و تغيير حالات رو با javascript و در بعضي حالات تنها با javascript
الان همه مرورگرها از javascript پشتيباني مي كنند مگر اينكه كاربر غيرفعال كرده باشه
كه به نظر من اون ديگه مشكل كاربر هست نه سايت

h.emamie
چهارشنبه 25 آذر 1388, 13:20 عصر
اگر خوب توجه کنید متوجه می شوید که کندتر است ، اینجا اصلا بحث تغییر قالب نیست که شما این مطلب رو میگید ، اینجا صحبت روی بارگذاری اولیه است .

وقتی از جاوا اسکریپت برای تشخیص استفاده کنید ، یک درخواست به سرور می رود وقتی که درخواست بر روی مرورگر بارگذاری شد ، تابع جاوا اسکریپت مرورگر را تشخیص می دهد و مجدادا در خواست جدیدی را به سرور ارسال می کند تا فایل css جدید بارگذاری شود ، یعنی در این روش ما در هر دفعه دو درخواست به سرور می فرستیم .

ولی در روش سروری همواره یک درخواست ارسال می شود .

:گریه:

afshin9032
چهارشنبه 25 آذر 1388, 14:57 عصر
جاوااسكريپت براي تشخيص مرورگر اصلا با سرور كاري نداره و با خود Browser سروكار داره و همه فرامين براي تشخيص رو بر روي كامپيوتر كاربر اجرا مي كنه و هيچ درخواستي را به سمت سرور نمي فرسته

h.emamie
چهارشنبه 25 آذر 1388, 15:13 عصر
جاوااسكريپت براي تشخيص مرورگر اصلا با سرور كاري نداره و با خود Browser سروكار داره و همه فرامين براي تشخيص رو بر روي كامپيوتر كاربر اجرا مي كنه و هيچ درخواستي را به سمت سرور نمي فرسته

اگر سوال اول در اين پست رو خوب بخونيد ، متوجه مي شويد كه حدف نهايي فقط تشخيص مرورگر نيست و هدف نهايي بارگذاري style درست مي باشد ، با توجه به اين نكته اگر درخواست جديد ارسال نكنيم ، بايد چه كاري كرد .

شايد مي خواهيد style هاي تمام مرورگر ها رو توي جاوااسكريپت بگذاريد .:افسرده:

afshin9032
چهارشنبه 25 آذر 1388, 21:58 عصر
شايد مي خواهيد style هاي تمام مرورگر ها رو توي جاوااسكريپت بگذاريد .:افسرده:
اگر كمي به پست ها توجه كني من نگفتم style ها رو با javascript تعريف كنه
منظور من اين است كه Css هارو تعريف كنه و با javascript اونارو مديريت كنه
فرض كن يك برنامه نوشتي كه اطلاعات رو در چندين مرحله از كاربر مي گيره ( چندين مرحله براي شلوغ نشدن صفحه است) و سپس يكدفعه همه را با هم ذخيره كنه
حال در مرحله اول اطلاعات رو گرفتي و مي خواي به مرحله دوم بري كه يك CSS داره كه نسبت به مررورگرها متفاوت است
حال تو از زبان سرور استفاده مي كني كه كلي پردازش داره و بايد اطلاعات مرحله اول رو به سمت سرور بفرستي و دوباره در مرحله دوم ذخيره كني يا javascript كه حداكثر با 10 خط مي شه style رو تغيير داد ؟ :متفکر: