באג בIE,FF,Opera

../images/Emo32.gif באג בIE,FF,Opera

התג <script/> בתוך מחרוזת של JS מתרנדר כסוף הסקריפט.... את זה גיליתי תוך כדי שאני בעצמי כותב parser לhtml (שדרך אגב לא סובל מחולשה זו) בל"נ אני יעלה את הקוד כשאסיים אותו. דוגמה בקובץ המצורף. (html)
 

EdotK

New member
זה לא באג, זה פיצ'ר

הוא די ידוע, והדרך לפתור אותו היא די פשוטה. במקום לכתוב "</script>", כותבים "</" + "script>"
 
תקרא לזה איך שנח לך

אמנם זו אכן שגיעה ידועה, ראיתי שהיא רשומה כבר בbugzilla, אבל בכל מקרה זו עצלות לשמה לרנדר דף רק לפי תגים "<" ו "/>", כל איזור חייב להתרנדר לפי החוקים שלו, כלומר מרגע שמופיע התג "<script>", אמורים לחול על הקלט חוקים של סקריפט ולא HTML. בכל מקרה, זה נגררתי לנושא בגלל שאני מחפש להציג דף html או לפות את התוכן שלו (בלי העיצוב) למטרות בקרה כך שיוצג כרשימת אובייקטים, לינקים, תמונות, וכל שאר האובייקטים (<EMBED>)
 
תקרא את התגובה מקודם

אם לא הבהרתי את עצמי מספיק, אז מרגע שמופיע התג <script> הקלט אמור להתרנדר לפי חוקי JS כלומר שמה שנמצא בתורך מרכאות נחשב למחרוזת ולא חלק מהתחביר וקר אם מופיעה תגית <script/> כחלק מהתחביר, דהיינו לא בתוך מרכאות, אז הכוונה היא לסיום הבלוק.
 
זו בעיה כי js היא לא ממש שפה

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

זה נכון לגבי רינדור בquirks mode אבל כפי שמצורף בדוגמה הבעיה קיימת גם הstardarts mode שבו הJS אמור להצמד לכללים. בכל מקרה כשאני יגמור לכתוב את הparser שלי, אני יריץ מבחן השוואתי בין שני האפשרויות על קבוצה של אתרים ואני יראה באיזה חלק יפלו יותר טעיות. בגדול מן הסתם אתה צודק
 

IgalR

New member
איך אתה מפרסר קוד כזה :

<body> <script> x = "this is my X value" </script> "hello world" </body>​
 
למעלה