פיתוח למוזילה ב-ASP.NET

מתוך וויקי
קפיצה אל: ניווט, חיפוש

מאמר זה מתייחס ל-ASP.NET 1.1. יתכן שהמצב השתפר בגרסה 2.0 ששוחררה לאחרונה.

שיפור ה־HTML

לעיתים קרובות אתרים שנכתבו בעזרת ASP.NET מוצגים בצורה משובשת בדפדפן מוזילה. הסיבה לכך היא ש־ASP.NET מנסה לזהות את הדפדפן שניגש לאתר, על פי מחרוזת זיהוי הדפדפן (User Agent), על מנת להגיש לו קוד HTML שיתאים ליכולות של אותו דפדפן. הזיהוי מתבצע על ידי זיהוי תבנית במחרוזת, בעזרת ביטוי רגולרי המוגדר בקובץ הקונפיגורציה של השרת. בברירת מחדל, הקובץ מכיל תבניות לזיהוי דפדפן אקספלורר, נטסקייפ 6, אופרה, WebTV, ואקספלורר למחשבי כף יד. דפדפנים שאינם מזוהים מבין אלה, מקבלים HTML נחות, שתואם בערך ל-HTML 3. כתוצאה מכך, משתמש שיגש אל אתר שנכתב בעזרת ASP.NET ולא בוצע בו שינוי כדי לזהות דפדפנים חדישים יותר, יסבול מתצוגה לקויה.

כדי לתקן זאת, יש להוסיף ביטויים רגולריים מתאימים. ניתן להוסיף את הביטויים לקובץ machine.config, הנמצא בדרך כלל בתיקייה C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG, ואז הוא ישפיע על כל האתרים המופעלים על השרת, או בקובץ web.config הנמצא בתיקייה של אתר מסויים, או אפילו בתת תיקייה של אתר, ואז הוא ישפיע על התיקייה שבה הוא נמצא והתיקיות שמתחתיה.

התוספת הבאה מוסיפה תמיכה לדפדפני מוזילה, קונקרר, גרסאות חדשות של אופרה, ודפדפנים מבוססי Apple Web Kit, כמו ספארי. <monospace dir="ltr">

 <case match="^Mozilla/5\.0 \([^)]*\) (Gecko/[-\d]+)(?'VendorProductToken' (?'type'[^/\d]*)([\d]*)/(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*)))?">
   browser=Gecko
   <filter>
     <case match="(Gecko/[-\d]+)(?'VendorProductToken' (?'type'[^/\d]*)([\d]*)/(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*)))">
       type=${type}
     </case>
     <case> 
       type=Mozilla
     </case>
   </filter>
   frames=true
   tables=true
   cookies=true
   javascript=true
   javaapplets=true
   ecmascriptversion=1.5
   w3cdomversion=1.0
   css1=true
   css2=true
   xml=true
   tagwriter=System.Web.UI.HtmlTextWriter
   <case match="rv:(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*))">
     version=${version}
     majorversion=0${major}
     minorversion=0${minor}
     <case match="^b" with="${letters}">
       beta=true
     </case>
   </case>
 </case>
 <case match="AppleWebKit/(?'version'(?'major'\d?)(?'minor'\d{2})(?'letters'\w*)?)">
   browser=AppleWebKit
   version=${version}
   majorversion=0${major}
   minorversion=0.${minor}
   frames=true
   tables=true
   cookies=true
   javascript=true
   javaapplets=true
   ecmascriptversion=1.5
   w3cdomversion=1.0
   css1=true
   css2=true
   xml=true
   tagwriter=System.Web.UI.HtmlTextWriter
   <case match="AppleWebKit/(?'version'(?'major'\d)(?'minor'\d+)(?'letters'\w*))(.* )?(?'type'[^/\d]*)/.*( |$)">
     type=${type}
   </case>
 </case>
 <case match=".+[K|k]onqueror/(?'version'(?'major'\d+)(?'minor'(\.[\d])*)(?'letters'[^;]*));\s+(?'platform'[^;\)]*)(;|\))">
   browser=Konqueror
   version=${version}
   majorversion=0${major}
   minorversion=0${minor}
   platform=${platform}
   type=Konqueror
   frames=true
   tables=true
   cookies=true
   javascript=true
   javaapplets=true
   ecmascriptversion=1.5
   w3cdomversion=1.0
   css1=true
   css2=true
   xml=true
   tagwriter=System.Web.UI.HtmlTextWriter
 </case>
 <case match="Opera[ /](?'version'(?'major'\d+)(?'minor'\.(?'minorint'\d+))(?'letters'\w*))">
   <filter match="[7-9]" with="${major}">
     tagwriter=System.Web.UI.HtmlTextWriter
   </filter>
   <filter>
     <case match="7" with="${major}">
       <filter>
         <case match="[5-9]" with="${minorint}">
           ecmascriptversion=1.5
         </case>
         <case>
           ecmascriptversion=1.4
         </case>
       </filter>
     </case>
     <case match="[8-9]" with="${major}">
       ecmascriptversion=1.5
     </case>
   </filter>
 </case>

</browserCaps> </monospace>

יש לשים את הקטע הזה תחת התג <system.web>, שתחת התג הראשי של הקובץ, <configuration>. אם כבר יש בלוק <browserCaps> בקובץ (ובקובץ machine.config אכן יש כזה) יש להוסיף את הקטע בסוף הבלוק, בהשמטת תגיות browserCaps.

פקדי אימות קלט

ASP.NET מכיל מספר פקדים מוכנים לווידוא נכונות הקלט בטפסים. פקדים אלה יודעים להשוות בין שני שדות (למשל, כאשר מבקשים להכניס פרט פעמיים כדי להיות בטוחים שאין בו טעות), לוודא ששדה מתאים לביטוי רגולרי מסויים (למשל, מבנה של כתובת דוא"ל), ועוד. בברירת מחדל, פקדים אלה פועלים בצד הלקוח, בעזרת ג'אווה סקריפט. כלומר, אם יש ללקוח דפדפן אקספלורר. אם בחר להשתמש בדפדפן מבוסס מוזילה, הפקדים לא יפעלו, ובמקרה הטוב לא יאפשרו לשלוח את הטופס. במקרה הרע, יאפשרו לשלוח טופס עם נתונים שגויים.

ווידוא קלט בצד הלקוח הוא רעיון גרוע בכל מקרה, משום שקל לעקוף אותו. קל לשלוח את הטופס בצורה מלאכותית, תוך עקיפת כל מנגנון הטופס, בעזרת תוכנה חיצונית שתממש את פרוטוקול HTTP.

מסיבות אלה, יש להגדיר אותם כך שיפעלו בצד השרת, ויבצעו post בכל מקרה (ובמקרה של טעות, יחזרו עם הטופס והודעת שגיאה). כדי לעשות זאת, יש לתת לתכונה EnableClientScript את הערך false.

קישורים חיצוניים


קישור קצר לדף זה: Developing for Mozilla with ASP.NET