سلام
یکی از مشکلات معمول من در سیستم های اطلاع رسانی و سرویس دهی کشور استفاده شدیدا اعصاب خورد کن از VB Script و یا استفاده صرف از JavaScript های مخصوص IE است!
این کدها تو Firefox (یا بقیه موتورهای بر پایه Gecko ) کار نمیکنند .
یک نمونه سایت دانشگاهمه که بعد از رد و بدل شدن چند ایمیل لطف کردن بالاش نوشتن:
* کاربرگرامی ، بخش اطلاع رسانی تحصیلی تنها از طریق مرور گر وب Internet Explorer قابل استفاده می باشد .
حالا اگر فرض کنیم همه ملت فقط از سیستمشون برای فیلم دیدن و ... استفاده میکنند خوب احتمالا از ویندوز هم استفاده میکنند و یه IE دم دست دارند.
اما کسی مثل بنده که از Firefox استفاده میکنه و دسترسی به IE براش کلی دردسر داره و برای دیدن یا سرویس گرفتن از یک سایت نمی صرفه حق دارن انتظار داشته باشن حداقل تو جایی مثل دانشگاه که سرمایه ملی یک کشوره و باید ازاد باشه اونقدر به آزادی اهمیت داده بشه که حداقل Script های Client-Side یه شکل universal و منطبق بر تمام موتورهای موجود باشه! ( جز اینجا اکثر جاهایی که از ASP استفاده میکنند این موضوع را مد نظر دارن - نه مثل بعضی که خوشحال باشن که یا چهارتا کلیک نصف کارشون انجام شد و بگن فقط Net. (!!!) )
به هر حال یه عتوان یک مثال برای سایت دانشگاهم اینطور میشه از روی این مشکل پرید:
اقزونه GreaseMonkey رو یه فایر فاکس اضافه میکنیم (که این امکان رو به ما میده تا صفحاتی خاص کد های Javascript اجرا کنیم).
بعد برای تغییر رفتار صفحه کد هایی مینویسیم (میتونید برای فهم رفتار فعلی صفحه و یافتن جاهایی که باید تغییر کنند از Firebug استفاده کنید):
UserScript را برای عمل روی این صفحات تنظیم میکنیم:
http://cyber*.qazviniau.ac.ir/iau/*
http://cyber*.qiau.ac.ir/*
http://internetpayment.qazviniau.ac.ir/*
http://internetpayment.qiau.ac.ir/*
ابتدا از Login اولیه شروع میکنیم:
صفحه login یک دکمه داره که تو سط اسکریت submit میشه اما اسکریپت قبل از Submit کاری نمیکنه پس این دکمه میتونه به جای Button بشه Submit ! پس خط زیر را به اسکریپت greasemonkey اضافه میکنیم:
if(loginbutton=document.getElementById('cmdLogin')) loginbutton.type='submit';
if برای اینه که چون اسکریپت روی همه صفحات اجرا میشه و همه جا این دکمه (cmdLogin) وجو د نداره خطا نگیریم.
(پس مشکل Login حل شد!!)
بعد از Login مشکل دکمه هایی هستند که در طول کار باهاشپن برخورد میکنیم و طبق کشفمون (!) از firebug فهمیدیم بخاطر ناقص بودن تابع getForm کار نمیکنند.
اونها رو با بازنویسی تابع getForm درست میکنیم:
unsafeWindow.getForm=function(ctl){
if (!ctl) {
return;
}
if (ctl.tagName == "FORM" || ctl.tagName == "form") {
return ctl;
}
if (ctl.parentElement) {
return getForm(ctl.parentElement);
}
if (ctl.form) {
return ctl.form;
}
return;
}
بخش Bold رو ما به تابع اضافه کردیم.
unsafeWindow شی است که به ما دسترسی مسقیم به اشیای صفحه را میدهد. برای اطلاعات بیشتر در مورد آن اینجا رو ببینید.
میمونه منوهای صفحه که هیچ کدوم کار نمیکنند!!
برای درست کردن اونا کلی وقت صرف میشه پس بیخیالش میشیم و یه منوی ساده جدید میسازیم!!: این کد رو اضامه میکنیم:
function printmenu(pmenu,level){
var out='';
var i;
if(pmenu.children){
if(pmenu.command!='null'){out="<optgroup label='"+pmenu.title+"'>\n";}
for(i=0;i<pmenu.children.length;i++){
out+=printmenu(pmenu.children[i],level+1);
}
if(pmenu.command!="null"){out+="</optgroup>\n"};
return out;
}else{
return "\n<option onclick='javascript:document.getElementsByName(\"changeMenuHiddenName\")[0].value=\""+pmenu.command+"\";frmChangeMenu.submit();' value='"+pmenu.command+"' >"+pmenu.title+"</option>\n";
}
}
menu_item_obj32=unsafeWindow.menu_item_obj32;
var list=printmenu(menu_item_obj32,0);
var AS_EL=document.createElement('select');
AS_EL.style.position='absolute';
AS_EL.style.left='450px';
AS_EL.style.top='10px';
AS_EL.innerHTML=list;
AS_EL.dir="rtl";
document.body.appendChild(AS_EL);
و به این ترتیب یه Select box به صفحه اضافه میشه تا یشه بجای منو استفاده کرد!:

والسلام
پی نوشت : این کدها کامل نیستند و من هرجا لازم بشه چیزی بشه اضافه میکنم . این فقط یه مثال ساده بود تا با اشنایی ایجاد کنم تا اگر لازم شد اینطور رفتار صفحات رو تغییر بدید.
:آرین