DCSIMG
Question from .Net Tapuz forum: How does ASP.Net decides how to render pages and how can I make it render to a mobile device? - Justin myJustin = new Justin( Expriences.Current );

Question from .Net Tapuz forum: How does ASP.Net decides how to render pages and how can I make it render to a mobile device?

שאלה:

למה התקנים ניידים (במקרה שלי נוקיה 6230I) לא יכולים להציג WebForm שנוצר ע"י VisualStudio 2005 אלא רק MobileWebForm?
למרות שהגעתי למצב שפלט הHTML של שניהם היה שווה לחלוטין.

הבעיה שלי שהVisuel Studio 2005 לא מכיר את כל אפשרויות הגלשן של נוקיה, וכל עיצוב שלדעתו הגלשן לא מכיר נמחק ע"י ASP.NET בהרצה... למישהו יש ניסיון בזה?

תשובה:

הקביעה של היכולות של הדפדפן שלך נקבעת ע"י הפריימוורק ובהתאם הרנדור.

בדוט נט 1.1 קיים אלמנט <browserCaps> שיושב ברמת ה-machine.config (למרות שגם ניתן לקבוע אותו ברמת ה-web.config) ומכיל את ההתאמה בין המאפיינים השונים של הדפדפן (בעיקר שמו ופילטרים נוספים המבוססים על כך) לבין היכולות של הדפדפן ביחס למה שהפריימוורק צריך לדעת (האם תומך בטבלאות, האם תומך ב-CSS, האם תומך ב-XML, האם תומך בג'אווה סקריפט, האם תומך בעוגיות וכיו"ב). כלומר, באמצעות regexp על שם הדפדפן מזהה דוט נט 1.1 את הדפדפן ולפי הזיהוי החח"ע הזה קובע את היכולות שלו.
למשל, הנה ה-<browserCaps> שהיה נהוג להוסיף כדי לגרום ל-ASP.Net 1.1 להכיר בפיירפוקס כדפדפן עילי שיכול לתמוך בג'אווה סקריפט (ובכך בוולידטורים):

<browserCaps>
<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> <!-- plain Mozilla if no VendorProductToken found -->
            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>
</browserCaps>

 

בדוט נט 2.0 הקונספט הזה השתנה עקב קיומם של כמה אלפי דפדפנים בימינו. מה שנהוג כיום הוא ליצור קבצי browser שמופקים אוטומטית מאתר מיקרוסופט. הקבצים האלו נוצרים בכך שתפתח מהדפדפן הרלוונטי אתר ספציפי של מיקרוסופט וזה יחזיר לך את קובץ ה-browser לאותו דפדפן. קובץ ה-browser מכיל גם את תבנית הזיהוי של אותו הדפדפן, אבל בנוסף מכיל לא רק איזה 10-20 מאפיינים לאותו דפדפן אלא מכיל באזור ה-300 מאפיינים שונים של אותו דפדפן וזה מגיע לרזולוציות מאוד חזקות של אבחון יכולות הדפדפן. את כל קבצי ה-browser הרלוונטים אוספים ביחד בתיקייה אחת ומשתמשים בכלי aspnet_regbrowsers.exe (או משהו כזה) ומקמפלים אותם ל-dll שנקרא browser assembly ואותה פורסים כחלק מאפליקציה או כ-browser assmebly ראשית של פריימוורק על השרת. מיקרוסופט הפיצה בהתחלה אוסף קטן של 3,000 קבצי browser לכל הדפדפנים שיכלה למצוא ומאז הפסיקה את העדכון של קבצים אלו וסומכת ע"י גורמים צד שלישי או הלקוחות שיהיו להם את קבצי ה-browser העדכניים.
למשל, תוכל למצוא במחשב שלך ב-
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers\ie.browser את קובץ ה-browser של Internet explorer.

במקרה שלך אם אתה רוצה שהפלאפון שלך יתמך כדפדפן עילי (ע"ע IE) תצטרך בהתאם לגירסת הפריימוורק שלך להגדיר אותו כאחד כזה. בין אם זה ע"י הוספת אלמנט ל-<browserCaps> בדוט נט 1.1 או ע"י יצירת קובץ browser בדוט נט 2.0 ושינוי אותו כך שיתרנדר בדומה ל-IE. רק אזהרה מראש, זה שה-HTML זהה, לא אומר שבכל מצב הוא תמיד יהיה זהה. יתכן וכי הגעת למצב מאוד בסיסי ופשוט שבו ה-HTML באמת זהה, אבל Mobile Controls יכולים גם להתרנדר לאפליקציות על פלאפונים מאוד ישנים שבכלל לא דוברים HTML או אפילו לא יודעים מה זה WAP, מה שבלתי אפשרי כמובן ל-ASP.Net WebControls.

 

קישור: http://www.tapuz.co.il/tapuzforum/main/Viewmsg.asp...

 

Published Friday, October 06, 2006 5:40 PM by Justin-Josef Angel [MVP]

Comments

No Comments