JavaScript

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

JavaScript היא שפת תסריט מבוססת "תכנות מונחה דגמי אב" (Prototypes), שהוא סוג (לא נפוץ) של תכנות מונחה-עצמים. היא ידועה בעיקר כשפה המוטבעת בדפי HTML על מנת להציג דפים דינמיים, שמשולבת בהם תוכנה. קוד ה-JavaScript שמשולב בדף HTML מבוצע על ידי הדפדפן. JavaScript נוחה מאוד לעבודה עם ה-DOM ולתפעול DHTML.

היסטוריה[עריכה | עריכת קוד מקור]

השפה פותחה על ידי חברת נטסקייפ בשנת 1995, ויושמה לראשונה בדפדפן נטסקייפ 2.0. הגרסה הייתה JavaScript 1.0. בנוסף לכתיבת תסריטים בצד הלקוח (בדפדפן) מאפשרת JavaScript כתיבת תסריטים גם בצד השרת, לתפעול בשרת אינטרנט. השפה מזכירה את שפת ActionScript שמיוחדת לפלאש. קיימת גרסה תקנית של השפה הקרויה ECMAScript.

חברת מיקרוסופט פיתחה שפה מתחרה להפעלה בדפדפן בשם VBScript, אך לא הצליחה ביעד זה (היא הצליחה יותר בשימושים אחרים של השפה, כולל כתיבת תסריטים בצד השרת - ASP). בנוסף יצאה מיקרוסופט עם גרסה משלה של שפת JavaScript, והיא קרויה JScript. דבר זה גורם עד היום לבעיות רבות בקרב מפתחי האינטרנט, בין אם בגלל מפתחים המעלימים עין מהעובדה שהם מתכנתים ב־JScript בלבד, ומתעלמים מדפדפנים אחרים המפענחים את JavaScript הרגילה – ובין בגלל מפתחי אתרים הנאלצים להתמודד עם חוסר התמיכה של הדפדפן אינטרנט אקספלורר של מיקרוסופט בחלקים תקניים מ־JavaScript[דרוש מקור].

דוגמה לתוכנית JavaScript[עריכה | עריכת קוד מקור]

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

<input type="text" id="primetest" value="" />
<input type="button" onclick="communicate();" value="Check" />
 
<script type="text/javascript">
        function check(n)
        { // Check if the number n is prime.
                if (n <= 3)
                        return 0;
                if (n%2 == 0) // is n divisible by 2?
                        return 2;
                if (n%3 == 0) // is n divisible by 3?
                        return 3;
                if (n%5 == 0) // is n divisible by 5?
                        return 5;
                var sr = Math.sqrt(n);
                // try to divide the checked number by all numbers till its square root.
                for (var i=6; i<=sr; i+=6)
                {
                        if (n%(i-1) == 0) // is n divisible by i-1?
                                return i-1;
                        if (n%(i+1) == 0) // is n divisible by i+1?
                                return i+1;
                }
                return 0; // n is a prime, 0 returns.
        } // End of check function.
 
        function communicate()
        { // communicate with the user.
                var i; // the checked number.
                var factor; // if the checked number is not a prime, this is its first factor.
                i = document.getElementById("primetest").value; // get checked number, using DOM.
                // it is a valid input?
                if ( isNaN(i) || (i <= 0) || (Math.floor(i) != i) )
                        alert("The checked object should be a whole positive number");
                else
                {
                        factor = check(i);
                        if (factor == 0)
                                alert(i + " is a prime");
                        else
                                alert(i + " is not a prime, " + i + "=" + i/factor +"x"+ factor);
                }
        } // End of communication function
</script>


אבטחה בתוכניות JavaScript[עריכה | עריכת קוד מקור]

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

JavaScript Manipulation[עריכה | עריכת קוד מקור]

ניתן להזריק ולהריץ קוד שלא מוזכר כלל בקוד מקור, בכל דף אינטרנט שמופיע בדפדפן. שיטה זו נקראת JavaScript manipulation. ב-JavaScript manipulation מכניסים את פקודות הסקריפט בשורת הכתובת של הדפדפן, ולרוב הוא מיועד להשפיע על ה-DOM. דוגמה:

javascript: alert(document.cookie);

בדוגמה זו נקפיץ באמצעות הפקודה alert תיבת הודעה עם העוגיות ששמורות במחשב לדף זה. על מנת להגן מפני התקפות הינדוס חברתי (social engineering), השימוש בשיטה זו מוגבל בחלק מגרסאות הדפדפנים המודרניות. לדוגמה, במוזילה פיירפוקס בגרסה 6 ומעלה, קוד שהוזרק בשיטה זו, לא יורש את ההקשר של הדף. כלומר, לקוד זה לא יתאפשר להשפיע על ה-DOM. בגוגל כרום ובאינטרנט אקספלורר בגרסה 9 ומעלה, כאשר מדביקים כתובות כאלה בשורת הכתובת, הפרוטוקול (javascript:) מושמט מהכתובת המודבקת.

הדבקת הקוד מהדוגמה הקודמת בשורת הכתובת ידביק את הקוד הבא -

alert(document.cookie);

ייבוא קובצי JS[עריכה | עריכת קוד מקור]

ניתן גם לייבא את הסקריפט מתוך קובץ, במקום לכתוב הכל בדף HTML, באמצעות הפרמטר src (קיצור של source) בתגית script. דוגמה:

<script type="text/javascript" src="filename.js"></script>

כאשר filename.js הוא קובץ ה .js אליו מפנים.

קובץ ה-.js מכיל את כל הפקודות המופיעות בתוך התגית <script> ושהדפדפן יריץ.

ראו גם[עריכה | עריכת קוד מקור]

קישורים חיצוניים[עריכה | עריכת קוד מקור]