اجرا JavaScript

ECMAScript هسته‌ای JavaScript زبان، دستور زبان و شیءهای پایه این زبان را توصیف می‌کند؛

DOM روش‌ها و رابط‌های تعاملی با محتوای وب‌سایت را توصیف می‌کند؛

BOM روش‌ها و رابط‌های تعاملی با مرورگر را توصیف می‌کند.

ECMAScript، DOM و BOM

با اینکه ECMAScript یک استاندارد مهم است، اما بخشی از JavaScript منحصر به فرد نیست، البته، بخشی از آن نیز به استاندارد تبدیل نشده است. در واقع، یک پیاده‌سازی کامل JavaScript از سه بخش مختلف تشکیل شده است:

JavaScript شامل ECMAScript، DOM و BOM است

ECMAScript

ECMAScript با هیچ مرورگر خاصی پیوند ندارد، در واقع، آن نیز هیچ روشی برای ورودی و خروجی کاربر را ذکر نمی‌کند (این با زبان‌هایی مانند C متفاوت است که برای انجام اینگونه وظایف به کتابخانه‌های خارجی وابسته‌اند). پس ECMAScript چیست؟ توضیحات استاندارد ECMA-262 (بخش دوم) به شرح زیر است:

ECMAScript می‌تواند توانایی‌های برنامه‌نویسی اسکریپت برای محیط‌های میزبان مختلف را فراهم کند، بنابراین زبان اسکریپت هسته‌ای با هر محیط میزبان خاص جداگانه تعریف می‌شود... ...

مرورگرهای وب محیط میزبان ECMAScript هستند، اما این تنها محیط میزبان نیست. در واقع، محیط‌های مختلف بسیاری دیگر نیز وجود دارند که می‌توانند اجرای ECMAScript را در خود جای دهند (مثلاً ScriptEase Nombas و ActionScript که Macromedia در Flash و Director MX استفاده می‌کند). پس ECMAScript خارج از مرورگر چه چیزهایی را مشخص می‌کند؟

به طور ساده، ECMAScript شامل موارد زیر است:

  • گزارش‌نگاری
  • انواع
  • دستورات
  • واژه‌های کلیدی
  • واژه‌های ذخیره‌شده
  • عملگرها
  • اشیاء

ECMAScript تنها یک توصیف است که تمام ویژگی‌ها، روش‌ها و اشیاء زبان اسکریپت را تعریف می‌کند. زبان‌های دیگر می‌توانند ECMAScript را پیاده‌سازی کنند تا به عنوان پایه‌ای برای عملکرد خود استفاده کنند، JavaScript به همین ترتیب است:

ECMAScript، JavaScript، ActionScript، ScriptEase

هر مرورگر دارای اجرای خود از رابط 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 به طور اساسی مشابه Netscape JavaScript 1.1 است، اما همه کدهای مرتبط با مرورگر حذف شده‌اند و همچنین برخی تنظیمات کوچک انجام شده است. ابتدا، ECMA-262 نیاز به پشتیبانی از استاندارد Unicode دارد (برای پشتیبانی از زبان‌های چندگانه). دوم، آن نیاز به این دارد که اشیاء مستقل از پلتفرم باشند (در واقع، اجرای JavaScript 1.1 در مختلف پلتفرم‌ها دارای اشیاء مختلفی است، به عنوان مثال، شیء Date وابسته به پلتفرم است). این دلیل اصلی این است که چرا JavaScript 1.1 و 1.2 با استاندارد ECMA-262 نسخه اول سازگار نیستند.

بیشتر به‌روزرسانی‌های نسخه دوم ECMA-262 اصلاحات دبیرخانه‌ای هستند. این به‌روزرسانی استاندارد برای تطابق دقیق با ISO/IEC-16262 انجام شد و هیچ اضافه‌ای، تغییر یا حذف خاصی انجام نشد. ECMAScript معمولاً نسخه دوم را رعایت نمی‌کند.

نسخه سوم ECMA-262 اولین به‌روزرسانی واقعی استاندارد است. این به‌روزرسانی شامل به‌روزرسانی‌های مربوط به پردازش رشته، تعریف خطاها و خروجی عددی است. همچنین، این به‌روزرسانی شامل پشتیبانی از عبارات عادی، دستورالعمل‌های جدید، مدیریت استثناها با استفاده از try...catch و تغییرات کوچکی برای بین‌المللی‌سازی استاندارد است. به طور کلی، این به‌روزرسانی نشان‌دهنده این است که ECMAScript به یک زبان برنامه‌نویسی واقعی تبدیل شده است.

2. معنای ECMAScript مطابقت

در ECMA-262، تعریف ECMAScript مطابقت (conformance) واضح است. یک زبان اسکریپت باید چهار اصل اساسی زیر را برآورده کند:

  • اجرای‌هایی که با این استاندارد مطابقت دارند باید تمام
  • اجرای‌هایی که با این استاندارد مطابقت دارند باید استاندارد Unicode کاراکتر (UCS) را پشتیبانی کنند.
  • اجرای‌هایی که با این استاندارد مطابقت دارند می‌توانند
  • اجرای‌هایی که با این استاندارد مطابقت دارند می‌توانند از

تمام اجرای ECMAScript باید با این استاندارد مطابقت داشته باشد.

3. پشتیبانی ECMAScript در مرورگرهای وب

نیتسکپ ناوگاتور 3.0 که شامل جاوااسکریپت 1.1 است در سال 1996 منتشر شد. سپس، استاندارد جاوااسکریپت 1.1 به عنوان یک پیشنویس استاندارد جدید به EMCA ارائه شد. با توجه به محبوبیت انفجاری جاوااسکریپت، نیتسکپ با خوشحالی شروع به توسعه نسخه 1.2 کرد. اما مشکل اینجاست که ECMA پیشنویس نیتسکپ را پذیرفته نشد. پس از مدتی از انتشار نیتسکپ ناوگاتور 3.0، مایکروسافت IE 3.0 را منتشر کرد. این نسخه از IE شامل JScript 1.0 (نام خودکاربردی مایکروسافت برای جاوااسکریپت) بود که برنامه‌ریزی شده بود تا با جاوااسکریپت 1.1 قابل مقایسه باشد. اما به دلیل ناکافی بودن مستندات و برخی ویژگی‌های تکراری نادرست، JScript 1.0 فاصله زیادی با جاوااسکریپت 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 منتشر شد، اما در مرورگرها قرار نگرفت). مایکروسافت به شدت 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 نسخه سوم پایبند هستند.

جدول زیر پشتیبانی 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 (مدل سند مستند) یک رابط برنامه‌ای (API) برای HTML و XML است. DOM تمام صفحه را به یک سند از سطح‌های گره‌ای برنامه‌ریزی می‌کند. هر بخشی از یک صفحه HTML یا XML یک فرزند گره است. به این HTML صفحه زیر توجه کنید:

<html>
  <head>
    <title>صفحه نمونه</title>
  </head>
  <body>
    <p>سلام دنیا!</p>
  </body>
</html>

این کد می‌تواند با استفاده از DOM به یک نمودار سطح‌های گره‌ای تبدیل شود:

نمودار سطوح گره DOM

DOM با ایجاد یک درخت برای نمایش سند، توسعه‌دهندگان را قادر می‌کند تا به محتوای و ساختار سند کنترل بی‌نظیری داشته باشند. با استفاده از API DOM می‌توان به راحتی گره‌ها را حذف، اضافه و جایگزین کرد.

1. چرا DOM غیر قابل جدا کردن است

از زمانی که IE 4.0 و Netscape Navigator 4.0 پشتیبانی از فرم‌های مختلف HTML دینامیک (DHTML) را شروع کردند، توسعه‌دهندگان برای اولین بار قادر به تغییر ظاهر و محتوای آن بدون بارگذاری مجدد صفحه شدند. این یک جهش بزرگ در فناوری وب بود، اما همچنین مشکلات بزرگی را به همراه آورد. Netscape و مایکروسافت هر دو DHTML خود را توسعه دادند، و دوران‌ای که توسعه‌دهندگان فقط باید یک صفحه HTML بنویسند تا در همه مرورگرها قابل دسترسی باشد، به پایان رسید.

صنعت تصمیم گرفته است که باید کاری برای حفظ ویژگی‌های فرا‌پایه وب انجام دهد، آنها نگران این هستند که اگر Netscape و شرکت مایکروسافت به این شکل ادامه دهند، وب به دو بخش مستقل تقسیم خواهد شد، هر بخش فقط برای یک مرورگر خاص مناسب است. بنابراین، گروهی که مسئول تعیین استانداردهای ارتباطی وب است، W3C (World Wide Web Consortium) شروع به تدوین DOM کرد.

2. سطح‌های مختلف DOM

DOM Level 1 در اکتبر 1998 توسط W3C ارائه شده است. این شامل دو مودل است، یعنی DOM Core و DOM HTML. اولی ارائه‌ای از ساختار مستندات بر اساس XML را فراهم می‌کند تا بتوان به هر بخش از مستند دسترسی و عمل کرد؛ دومی اشیاء و روش‌های اختصاصی HTML را اضافه می‌کند تا DOM Core را گسترش دهد.

توجه داشته باشید که DOM مخصوص JavaScript نیست، در واقع بسیاری از زبان‌های دیگر آن را نیز پیاده‌سازی کرده‌اند. با این حال، DOM در مرورگرهای وب به صورت ECMAScript پیاده‌سازی شده است و اکنون بخش بزرگی از زبان JavaScript است.

DOM Level 1 تنها یک هدف است، یعنی برنامه‌ریزی ساختار مستندات، در حالی که هدف DOM Level 2 بسیار گسترده‌تر است. گسترش‌های اولیه DOM به پشتیبانی از رویدادهای ماوس و رابط‌های کاربری (DHTML از اینها پشتیبانی گسترده‌ای دارد)، محدوده، جستجو (روش‌های تکراری بر روی مستندات DOM) و پشتیبانی از CSS (تبدیل‌های استایل‌های متمرکز) اضافه شده است و با اضافه کردن رابط‌های اشیاء، پشتیبانی از XML نام‌گذاری شده است. DOM Core اصلی که توسط Level 1 معرفی شده است، از پشتیبانی از XML نام‌گذاری نیز برخوردار است.

DOM Level 2 چندین مودل جدید DOM را معرفی کرده است که برای پردازش نوع‌های جدید رابط‌ها استفاده می‌شوند:

  • DOM دیدگاه - توصیف رابط‌هایی برای نظارت بر مختلف دیدگاه‌های مستندات (یعنی مستندات قبل و بعد از استایل‌سازی CSS)
  • DOM رویداد - توصیف رابط‌هایی برای رویدادها
  • DOM استایل - توصیف رابط‌هایی برای پردازش استایل‌های CSS
  • DOM جستجو و محدوده - توصیف رابط‌هایی برای جستجو و عمل بر روی درخت مستندات

DOM Level 3 روش‌هایی برای بارگذاری و نگهداری یکپارچه مستندات را معرفی کرده است (که در مودل جدید DOM Load and Save گنجانده شده است) و روش‌هایی برای تأیید مستندات (DOM Validation) را، که DOM را به طور قابل توجهی گسترش داده است. در Level 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 و DOM HTML، چندین زبان دیگر نیز استانداردهای DOM خود را منتشر کرده‌اند. این زبان‌ها بر اساس XML هستند و هر کدام از DOM‌ها روش‌ها و رابط‌های خاص خود را به زبان‌های مربوطه اضافه می‌کنند:

  • زبان شکل‌های قابل انعطاف (SVG) 1.0
  • زبان برچسب‌گذاری عددی (MathML) 1.0
  • زبان یکپارچه‌سازی چندرسانه‌ای (SMIL)

نکته:اگر می‌خواهید مطالب بیشتری یاد بگیرید، لطفاً به CodeW3C مراجعه کنید آموزش SMIL و آموزش SVG.

علاوه بر این، زبان‌های دیگری نیز پیاده‌سازی‌های خود از DOM را توسعه داده‌اند، مانند زبان رابط کاربری XML Mozilla (XUL). اما تنها چندین زبان از لیست بالا استانداردهای پیشنهادی W3C هستند.

پشتیبانی DOM در مرورگرهای وب

DOM قبل از اینکه در مرورگرهای وب پیاده‌سازی شود، یک استاندارد بود. اولین تلاش IE برای پیاده‌سازی DOM در نسخه 5.0 بود، اما واقعاً تا نسخه 5.5 پس از آن پشتیبانی واقعی از DOM را داشت، IE 5.5 سطح 1 DOM را پیاده‌سازی کرد. از آن زمان به بعد، IE هیچ ویژگی جدید DOM را معرفی نکرد.

Netscape تا نسخه Netscape 6 (Mozilla 0.6.0) از پشتیبانی DOM استفاده کرده است. در حال حاضر، Mozilla بهترین پشتیبانی از DOM را دارد و سطح کامل 1، تقریباً همه سطح 2 و بخشی از سطح 3 را پیاده‌سازی کرده است. (هدف تیم توسعه Mozilla این است که مرورگری با 100% سازگاری با استانداردها بسازند و کار آن‌ها به نتیجه رسیده است.)

Opera تا نسخه 7.0 از پشتیبانی DOM استفاده کرده است، و Safari نیز بیشتر DOM سطح 1 را پیاده‌سازی کرده است. تقریباً همه آن‌ها در سطح IE 5.5 قرار دارند و در برخی موارد، حتی از 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 مراجعه کنید آموزش HTML DOM و آموزش XML DOM.

BOM

IE 3.0 و Netscape Navigator 3.0 یک ویژگی ارائه دادند - BOM (مدل ابر اشیاء مرورگر)، که امکان دسترسی و عمل به پنجره‌های مرورگر را فراهم می‌کند. با استفاده از BOM، توسعه‌دهندگان می‌توانند پنجره‌ها را حرکت دهند، متن状态 بار را تغییر دهند و عملاتی که مستقیماً با محتوای صفحه مرتبط نیستند را انجام دهند. نکته‌ای که BOM را منحصر به فرد می‌کند و همیشه مورد سوال قرار می‌گیرد این است که آن تنها بخشی از JavaScript است و هیچ استاندارد مرتبطی ندارد.

BOM اصلی‌ترین وظیفه خود را در مدیریت پنجره‌های مرورگر و فریم‌ها انجام می‌دهد، اما معمولاً گسترش‌های JavaScript مرورگر خاص به عنوان بخشی از BOM در نظر گرفته می‌شوند. این گسترش‌ها شامل:

  • نشان دادن پنجره جدید مرورگر
  • جابجایی، بستن پنجره مرورگر و تغییر اندازه پنجره
  • ابزار Location که اطلاعات دقیق مرورگر وب را ارائه می‌دهد
  • ابزار Screen که اطلاعات دقیق وضوح صفحه کاربر را ارائه می‌دهد
  • پشتیبانی از cookie
  • IE BOM را گسترش داد و ActiveXObject را به آن اضافه کرد که می‌توان با JavaScript ActiveX Object را نمونه‌سازی کرد

به دلیل نبود استانداردهای BOM مرتبط، هر مرورگر خودش از BOM استفاده می‌کند. برخی استانداردهای واقعی وجود دارد، مانند داشتن یک ابزار Window و ابزار Navigation، اما هر مرورگر می‌تواند برای این ابزارها یا ابزارهای دیگر属性 و روش‌های خود را تعریف کند.

مطالعه کنید: