تحقيق جافا سكربت

يصف ECMAScript الجرام والم对象的 الأساسية للغة؛

يصف DOM الطرق والواجهات للتعامل مع محتوى الصفحة;

يصف BOM الطرق والواجهات للتفاعل مع المتصفح.

ECMAScript، DOM و BOM

على الرغم من أن ECMAScript هو معيار مهم، إلا أنه ليس الجزء الوحيد من JavaScript، بالطبع، وليس الجزء الوحيد الذي تم تعقيبه. في الواقع، يتكون تنفيذ JavaScript الكامل من 3 أجزاء مختلفة:

جافا سكربت يشمل إكماستريكس، بي إم أو، بي أو إم

ECMAScript

لا يتعلق ECMAScript بأي متصفح محدد، وفي الواقع، لم يذكر أي طريقة للاستقبال أو الإرسال للنصائح (الذي يختلف عن لغة C هذا النوع من اللغات التي تحتاج إلى مكتبات خارجية للقيام بمثل هذه المهام). إذن ما هو ECMAScript؟ وصف إيما-262 المعيار (الفقرة الثانية) كالتالي:

“ECMAScript يقدم القدرة على البرمجة بالسكربت للبيئات المضيفة المختلفة، لذا يتم تحديد لغة السكربت الأساسية بشكل منفصل عن أي بيئة مضيفة معينة... ...”

المتصفح هو بيئة مضيفة لـ ECMAScript، ولكن ليس البيئة الوحيدة. في الواقع، هناك العديد من البيئات المختلفة الأخرى (مثل Nombas ScriptEase، و ActionScript الذي يستخدمه Macromedia في Flash و Director MX) التي يمكنها استضافة تنفيذ ECMAScript. إذن، ما الذي يحدده ECMAScript خارج المتصفح؟

بكل بساطة، يصف ECMAScript ما يلي:

  • النحو
  • الأصناف
  • الجمل
  • الكلمات المفتاحية
  • الكلمات المحددة
  • المعادلات
  • الأجسام

ECMAScript مجرد وصف، يحدد جميع خصائص طرق الأجسام للغة السكربت. يمكن للغات الأخرى تنفيذ ECMAScript كمعيار للوظائف، و JavaScript هو مثل ذلك:

إكماستريكس، جافا سكربت، أكشن سكريبت، سكريبت إييز

لدي كل متصفح تنفيذًا خاصًا به لـ ECMAScript، ثم يتم توسيع هذا التنفيذ لتشمل DOM و BOM (سيتم مناقشة ذلك في الفصول القادمة). بالطبع، هناك أيضًا لغات أخرى توسعت في ECMAScript، مثل Windows Scripting Host (WSH) و ActionScript في Flash و Director MX من Macromedia، و Nombas ScriptEase.

1. إصدارات ECMAScript

تم تقسيم ECMAScript إلى عدة إصدارات مختلفة، وهي معروفة في معيار يُدعى ECMA-262. مثل جميع المعايير الأخرى، سيتم تحرير وتحديث ECMA-262. سيتم إصدار إصدار جديد للمعيار عند وجود تحديث رئيسي. أحدث إصدار من ECMA-262 هو 5.1، الذي تم إصداره في يونيو 2011.

النسخة الأولى من ECMA-262 كانت في الأساس مشابهة لنيتسكيب جافا سكريبت 1.1، ولكن تم إزالة جميع التعليمات المتعلقة بالمتصفح، بالإضافة إلى بعض التعديلات الصغيرة. أولاً، تتطلب ECMA-262 دعم معيار يونيكود (لدعم اللغات المختلفة). ثانياً، تتطلب أن تكون الأجسام مستقلة عن المنصة (في الواقع، كان لدي Netscape جافا سكريبت 1.1 تنفيذ مختلف للأجسام، مثل جسم التاريخ، الذي يعتمد على المنصة). هذا هو السبب الرئيسي في عدم تطابق جافا سكريبت 1.1 و1.2 مع معيار ECMA-262 الأول.

كان تحديث الإصدار الثاني من ECMA-262 في معظمه تحديثًا إداريًا. كانت هذه التحديثات لتحقيق التوافق مع ISO/IEC-16262 الصارم، ولم يتم إضافة أو تعديل أو حذف محتويات خاصة. لا تتبع ECMAScript عادة الإصدار الثاني.

الإصدار الثالث من ECMA-262 هو تحديث حقيقي أولاً لهذا المعيار. يقدم تحديثات على معالجة النصوص، تعريف الأخطاء ونتائج الأرقام. كما يقدم دعمًا لأشكال الأشكال العادية، الأوامر الجديدة، معالجة الاستثناءات try...catch، والتعديلات الصغيرة لتحقيق دولية المعيار. في العادة، يعتبر هذا الإصدار علامة على أن ECMAScript أصبح لغة برمجة حقيقية.

2. ما هو توافق ECMAScript

في ECMA-262، هناك تعريف واضح للتوافق (conformance). يجب أن تكون لغة البرمجة النصية مطابقة لأربعة مبادئ أساسية:

  • يجب أن يدعم التنفيذ المتوافق جميع “أنواع القيم، الكائنات، الخصائص، الوظائف والبرامج اللغوية والمعاني” الموصوفة في ECMA-262 (ECMA-262، الصفحة الأولى)
  • يجب أن يدعم التنفيذ المتوافق معيار Unicode (UCS)
  • يمكن للتنفيذات المتوافقة إضافة “نوع إضافي، قيمة، كائن، خاصية ووظيفة” غير المحددة في ECMA-262. يصف ECMA-262 هذه الإضافات ككائنات جديدة أو خصائص جديدة لكائنات جديدة في النص
  • يمكن للتنفيذات المتوافقة دعم “قواعد البرامج والأشكال العادية” غير المحددة في ECMA-262 (ما يعني أنه يمكن استبدال أو توسيع دعم الأشكال العادية المدمجة)

يجب أن تتوافق جميع تنفيذات ECMAScript مع هذا المعيار.

3. دعم ECMAScript في متصفحات الويب

تم إصدار Netscape Navigator 3.0 الذي يحتوي على JavaScript 1.1 في عام 1996. ثم، تم تقديم معيار JavaScript 1.1 كنموذج أولي لنموذج جديد تم تقديمه إلى EMCA. مع الشعبية الهائلة لـ JavaScript، بدأت Netscape بسرعة في تطوير إصدار 1.2. ولكن هناك مشكلة، لم تقبل ECMA مشروع Netscape. بعد قليل من إصدار Netscape Navigator 3.0، أطلقت Microsoft IE 3.0. يحتوي الإصدار هذا على JScript 1.0 (اسم تنفيذ JavaScript الخاص بـ Microsoft)، وكان من المخطط أن يكون مماثلاً لـ JavaScript 1.1. ومع ذلك، لم يكن JScript 1.0 بعيدًا عن مستوى JavaScript 1.1 بسبب نقص الوثائق وبعض الخصائص المكررة غير المناسبة.

قبل إصدار النسخة النهائية لإصدار ECMA-262 الأول، تم إصدار Netscape Navigator 4.0 يحتوي على JavaScript 1.2 في عام 1997، وفي وقت لاحق من ذلك العام، تم قبول معيار ECMA-262 وتنقيحه. لذلك، لا تتوافق JavaScript 1.2 مع إصدار ECMAScript الأول، على الرغم من أن ECMAScript يجب أن يعتمد على JavaScript 1.1.

الخطوة التالية لـ JScript كانت إضافة JScript 3.0 في IE 4.0 (تم إصدار إصدار 2.0 مع IIS 3.0، ولكن لم يتم تضمينه في المتصفح). قامت Microsoft بترويج JScript 3.0 كأول لغة سكربت تتوافق بشكل حقيقي مع معيار ECMA. في ذلك الوقت، لم يتم إكمال إصدار ECMA-262 النهائي، لذا تعرض JScript 3.0 لنفس القدر من السوء كما كان JavaScript 1.2 - لم يكن يتوافق مع المعيار النهائي ECMAScript.

اخترت Netscape تحديث تنفيذ JavaScript الخاص بها في Netscape Navigator 4.06. جعل JavaScript 1.3 Netscape تتوافق تمامًا مع إصدار ECMAScript الأول. انضمت Netscape إلى دعم معيار Unicode، وأبقت جميع الأجسام على الخصائص الجديدة التي تم إدخالها في JavaScript 1.2، بينما أصبحت مستقلة عن المنصة.

عندما كشف Netscape عن شيفرة المصدر الخاصة به كمشروع Mozilla، كان من المخطط أن يتم دمج JavaScript 1.4 في Netscape Navigator 5.0. ومع ذلك، قرار جريء - إعادة تصميم كامل شيفرة Netscape من الصفر، دمر هذا العمل. تم إصدار JavaScript 1.4 فقط كلغة سكربت للخادم لـ Netscape Enterprise Server، ولم يتم إدراجه في المتصفحات بعد ذلك.

اليوم، جميع المتصفحات الإلكترونية الرئيسية تتبع إصدار ECMA-262 الثالث.

下面的表格列出了大部分流行的 Web 浏览器中的 ECMAScript 支持:

المتصفح توافق DOM
Netscape Navigator 2.0 -
Netscape Navigator 3.0 -
Netscape Navigator 4.0 - 4.05 -
Netscape Navigator 4.06 - 4.79 Edition 1
Netscape 6.0+ (Mozilla 0.6.0+) Edition 3
Internet Explorer 3.0 -
Internet Explorer 4.0 -
Internet Explorer 5.0 Edition 1
Internet Explorer 5.5+ Edition 3
Opera 6.0 - 7.1 Edition 2
Opera 7.2+ Edition 3
Safari 1.0+/Konqueror ~ 2.0+ Edition 3

DOM

DOM(文档对象模型)是 HTML 和 XML 的应用程序接口(API)。DOM 将把整个页面规划成由节点层级构成的文档。HTML 或 XML 页面的每个部分都是一个节点的衍生物。请考虑下面的 HTML 页面:

<html>
  <head>
    <title>Sample Page</title>
  </head>
  <body>
    <p>hello world!</p>
  </body>
</html>

这段代码可以用 DOM 绘制成一个节点层次图:

شجرة مستوى العناصر بي إم أو

DOM 通过创建树来表示文档,从而使开发者对文档的内容和结构具有空前的控制力。用 DOM API 可以轻松地删除、添加和替换节点。

1. 为什么 DOM 必不可少

自从 IE 4.0 和 Netscape Navigator 4.0 开始支持不同形态的动态 HTML(DHTML),开发者首次能够在不重载网页的情况下修改它的外观和內容。这是 Web 技术的一大飞跃,不过也带来了巨大的问题。Netscape 和微软各自开发自己的 DHTML,从而结束了 Web 开发者只编写一个 HTML 页面就可以在所有浏览器中访问的时期。

业界决定必须要做点什么以保持 Web 的跨平台特性,他们担心如果放任 Netscape 和微软公司这样做,Web 必将分化为两个独立的部分,每一部分只适用于特定的浏览器。因此,负责指定 Web 通信标准的团体 W3C(World Wide Web Consortium)就开始制定 DOM。

2. DOM 的各个 level

تم تقديم DOM Level 1 من قبل W3C في أكتوبر 1998. يتكون من جزأين، وهو DOM Core و DOM HTML. يوفر الأول هيكل وثيقة قائم على XML لتحديد وصول وتنفيذ أي جزء من الوثيقة؛ والثاني يضيف بعض الأشياء المخصصة لـ HTML وأدوات DOM Core.

لا يكون DOM مملوكًا فقط لـ JavaScript، في الواقع، تم تنفيذ العديد من اللغات الأخرى له. ومع ذلك، تم تنفيذ DOM في متصفحات الويب باستخدام ECMAScript، وهي الآن جزء كبير من لغة JavaScript.

DOM Level 1 هو هدف فقط، وهو تخطيط بنية الوثيقة، بينما تكون أهداف DOM Level 2 أوسع بكثير. تم إضافة دعم للموارد والمستخدمين الحاليين والأحداث (يدعم DHTML هذه الأحداث بشكل كبير)، والنطاقات، والاستكشاف (الطرق التي يتم تنفيذها مرة أخرى في وثيقة DOM) من خلال واجهات الأشياء لدعم CSS (جدول الأنماط المكدس). تم أيضًا إضافة دعمًا لـ XML namespaces من قبل DOM Core الأصلي الذي تم تقديمه في المستوى 1.

أدخل DOM Level 2 بعض الوحدات الجديدة من DOM لمعالجة أنواع واجهات جديدة:

  • عرض DOM - وصف متتبع العروض المختلفة للوثيقة (بما في ذلك الوثيقة قبل تطبيق الأنماط CSS وتلك بعد تطبيق الأنماط CSS)
  • أحداث DOM - وصف واجهات الأحداث
  • نمط DOM - وصف واجهات معالجة الأنماط القائمة على CSS
  • استكشاف وتنسيق DOM - وصف واجهات استكشاف وتنسيق شجرة الوثيقة

أدخل DOM Level 3 طرقًا موحدة لتحميل وإبقاء الوثائق (مضمنة في وحدة DOM Load and Save) وطرق التحقق من الوثائق (DOM Validation)، مما يوسع DOM. في المستوى 3، تم توسيع DOM Core لدعم جميع خصائص XML 1.0، بما في ذلك XML Infoset و XPath و XML Base.

عند تعلم DOM، قد تجد أن بعض الأشخاص يشيرون إلى DOM Level 0. لاحظوا أن هناك في الواقع لا يوجد معيار DOM Level 0، إنه مجرد نقطة مرجع تاريخية لـ DOM (DOM Level 0 يشير إلى DHTML المدعوم في IE 4.0 و Netscape Navigator 4.0).

3. DOM أخرى

إلى جانب DOM Core و DOM HTML، هناك أنواع أخرى من اللغات التي نشرت معايير DOM الخاصة بها. هذه اللغات تعتمد على XML، ويعطي كل DOM لغة ميزات ومكتبات خاصة به:

  • لغة الرسوم المتجهة القابلة للتحجيم (SVG) 1.0
  • لغة العلامات الرقمية (MathML) 1.0
  • لغة دمج المتعدد الوسائط (SMIL)

التعليقات:إذا كنت ترغب في معرفة المزيد من المعلومات، يرجى زيارة CodeW3C's دليل SMIL و دليل SVG.

بالإضافة إلى ذلك، قامت لغات أخرى بتطوير إصداراتها الخاصة من DOM، مثل لغة واجهة المستخدم XML الخاصة بـ Mozilla (XUL). ومع ذلك، فقط اللغات المذكورة أعلاه هي المعايير الموصى بها من قبل W3C.

دعم DOM في متصفحات الويب

DOM كانت معيارًا قبل أن يبدأ متصفحات الويب في تنفيذه. كان أول محاولة لـ IE في إصدار 5.0، ولكن في الواقع، لم يتمتع IE بدعم DOM الحقيقي حتى بعد إصدار 5.5، حيث قام IE 5.5 بتحقيق المستوى 1 لـ DOM. منذ ذلك الحين، لم يكن IE يقدم أي ميزات جديدة لـ DOM.

Netscape أضاف دعم DOM فقط في إصدار Netscape 6 (Mozilla 0.6.0). حاليًا، Mozilla يُعتبر أفضل دعم لـ DOM، حيث قام بتحقيق المستوى الكامل 1، تقريبًا جميع المستوى 2، وأجزاء من المستوى 3. (يهدف فريق تطوير Mozilla إلى بناء متصفح يوافق 100٪ للمواصفات، وقد حصلوا على مكافأتهم.)

Opera انضم إلى دعم DOM فقط في إصدار 7.0، وSafari أيضًا قام بتحقيق معظم DOM المستوى 1. إنها تقريبًا تساوي IE 5.5، وفي بعض الحالات، حتى تجاوزتها. ومع ذلك، بالنسبة لدعم DOM، جميع المتصفحات تُظهر خلفية Mozilla. يُظهر الجدول أدناه دعم المتصفحات الشائعة لـ DOM.

المتصفح توافق DOM
Netscape Navigator 1.0 - 4.x -
Netscape 6.0+ (Mozilla 0.6.0+) المستوى 1، المستوى 2، المستوى 3 (جزء منه)
IE 2.0 - 4.x -
IE 5.0 المستوى 1 (أدنى)
IE 5.5+ المستوى 1 (تقريباً جميعه)
Opera 1.0 - 6.0 -
Opera 7.0+ المستوى 1 (تقريباً جميعه) والمستوى 2 (جزء منه)
Safari 1.0+/Konqueror ~ 2.0+ المستوى 1

التعليقات:إذا كنت ترغب في تعلم المزيد عن معرفة DOM، يرجى زيارة CodeW3C's دليل HTML DOM و دليل XML DOM.

BOM

يقدم IE 3.0 و Netscape Navigator 3.0 خاصية - BOM (Browser Object Model)، يمكن من خلالها الوصول إلى وتعديل نافذات المتصفح. يمكن للبرمجيات باستخدام BOM تحريك النافذة، تغيير النص في شريط الحالة، وتنفيذ أفعال أخرى لا تتعلق مباشرة بمحتوى الصفحة. ما يميز BOM ويجعله غالبًا مشكوكًا فيه هو أنه جزء من JavaScript فقط، وليس هناك أي معايير ذات صلة.

يتعامل BOM بشكل رئيسي مع نافذات المتصفح والشرائح، ولكن عادةً يتم اعتبار التوسعات المحددة للمتصفح كجزء من BOM. وتشمل هذه التوسعات:

  • فتح نافذة متصفح جديدة
  • تحريك وإغلاق نافذة المتصفح وتغيير حجم النافذة
  • موضوع Location يقدم تفاصيل دقيقة عن متصفح الويب
  • موضوع Screen يقدم تفاصيل دقيقة عن دقة شاشة المستخدم
  • دعم الـ cookie
  • تم توسيع BOM من قبل IE، بإضافة فئة ActiveXObject، يمكن من خلالها استنخاذ ActiveX Objects باستخدام JavaScript

بسبب عدم وجود معايير BOM ذات صلة، يتمتع كل متصفح بأتمتة BOM الخاصة به. هناك بعض المعايير الفعلية، مثل وجود موضوع Window وموضوع Navigation، ولكن يمكن لكل متصفح تعريف خصائصه أو طرقه الخاصة لهذه المواضيع أو مواضيع أخرى.

الرجوع إلى: