JavaScript

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

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

לפי שמה של השפה, ניתן להסיק שהיא פיתוח של שפת התכנות Java שפותחה בידי חברת סאן מיקרוסיסטמס.

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

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

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

איפיוני השפה[עריכת קוד מקור | עריכה]

השפה תומכת בתחביר הסטנדרטי של שפת C, מבחינת אופרטורים, מבני בקרה ופקודות, ומבדילה בין אותיות גדולות לקטנות (case-sensitive). כמו ברוב שפות התסריט טיפוסי השפה מקושרים לערכים ולא למשתנים, משתנה X יכול להפוך במהלך הריצה ממספר למחרוזת לפי ההשמה.

השפה מבוססת "תכנות מונחה דגמי אב" (Prototypes), שהוא סוג (לא נפוץ) של תכנות מונחה-עצמים. השפה בעיקרה היא שפה מבוססת אובייקטים (אפילו טיפוס בוליאני [Boolean] הוא למעשה אובייקט). האובייקטים בשפה הינם מערכים אסוציאטיביים. תכנות מונחה עצמים אפשרי, אבל לא בדרך המקובלת של הגדרת מחלקה שאיננה קיימת בשפה, אלא באמצעות יצירת אובייקט והצמדת מאפיינים אליו. כל מאפיין באובייקט יכול לתפקד כמשתנה או פונקציה. ישנם שלשה סוגי אובייקטים: אובייקטים של השפה כמו משתנים (כמו אובייקט תאריכי Date ואובייקט מחרוזתי), אובייקטים של הדפדפן (כמו אובייקטי window ו-document), ואובייקטים שיוצר המשתמש. השפה תומכת בהרחבת מתודות של אובייקטים טבעיים בשפה כמו למשל מחרוזות או Date באמצעות Prototyping.

השפה הינה גם שפה מונחת אירועים (Events), כך שמהלך ריצת התוכנית מבוסס על אירועים שמתרחשים בזמן ביצועה. לכל אובייקט קיים אוסף אירועים הייחודי לו, והדרך הנפוצה היא לכרוך פונקציית של המשתמש עם אירוע של אובייקט מובנה. השפה תומכת בתכנות פונקציונאלי. פונקציה בשפה הינה אזרחית ממחלקה ראשונה, ולמעשה כל פונקציה היא אובייקט בעצמה. השפה מאפשרת השמה של פונקציות למשתנים, העברה של פונקציה כארגומנט, והגדרת פונקציות אנונימיות. השפה מתממשקת באופן טבעי עם ממשק DOM, המייצג מסמכי HTML ו־XML תוך שימוש במתודולוגיה של תכנות מונחה-עצמים. לשפה תמיכה מובנת בביטוי רגולרי.

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

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

<input type="text" id="primetest" value="" />
<input type="button" onclick="communicate();" value="Check" />
 
<script type="text/javascript">
        function get_factor(n)
        {
                var sr = Math.sqrt(n);
                // try to find a factor that is not 1.
                for (var i=2; i<=sr; i+=1) {
                        if (n%i == 0) // is n divisible by i?
                                return i;
                }
                return 1; // n is a prime.
        } // End of get_factor function.
 
        function communicate()
        { // communicate with the user.
                var 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");
                        return;
                }
                var factor = get_factor(i);
                if (factor == 1)
                        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);

עם זאת, במרבית הדפדפנים המתקדמים קיימים כלי פיתוח ייעודיים, בהם ניתן לבצע JavaScript manipulation בהיקף נרחב.

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

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

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

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

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

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

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