**«جافا سكريبت الواضحة»** (بالإنجليزية: Unobtrusive JavaScript)‏ هي تقنية ناشئة في لغة برمجة الجافا سكريبت، والمستخدمة على الشبكة العالمية. على الرغم من أن المصطلح لا يوجد له تعريف رسمي، فمفهوم مبادئه الأساسية يتضمن مايلي:

* فصل العملية («لسلوك طبقة») من تركيب صفحة الويب / المضمون والعرض
* أفضل الممارسات لتفادي المشاكل التقليدية لبرمجة الجافا سكريبت (مثل عدم ملائمه المتصفح وعدم وجود قابلية)
* التحسين التدريجي لدعم المتصفحات التي لا تدعم وظائف الجافا سكريبت

الحاجة إلى نموذج جديد
---------------------

لغة جافا سكريبت تاريخيا كان لها سمعة باعتبارها خرقاء، ولغة (hackish) غير صالحة لتطوير التطبيقات ،  هذا وقد تم إلى حد كبير نظرا للتطبيقات الغير متناسقة من اللغة نفسها في مختلف برامج التصفح، والاستخدام الواسع النطاق لرموز القص واللصق. إن الخطأ وقت التشغيل شائع بشكل كبير (وذلك من الصعب تصحيحه) أن قله من المبرمجين حاولوا أن يثبتوها، فطالما أن للنصوص سلوكا أكثر أو أقل من الطريقة المفترضه  ؛ النصوص غالبا ماتفشل تماما في بعض المتصفحات.

وظهر مؤخرا العديد من المتصفحات الموحدة وجافا سكريبت وأدوات تصحيح عالية الجودة كونت المنظمة، فمن الممكن تحجيم شفرة جافا سكريبت، وأصبح من الضروري ظهور واجهات (أجاكس).

في حين كان الجافا سكريبت قد حجزت لمرّة واحده للمهام البسيطة والغير حرجة نسبيا مثل التحقق من صحة النموذج والطرافات الزخرفية، أما الآن فتستخدم لكتابة مصادر برامج كبيره ومعقده التي غالبا ما تكون جزءا من الوظائف الأساسية للموقع. أخطاء التشغيل وأي سلوك غير متوقع لم تعد عيوب بسيطه، هي عيوب قاتلة.

«جافا سكريبت الواضحة» يمكن اعتبارها جزءا كبيرا من معاييرالويب؛ لشدة الطلب للتوافق عبر المتصفح دفع إلى تزايد التركيز على الترميز الموحد، وتزايد الطلب على تطبيقات الإنترنت الغنيةهو الذي يقود الحركة إلى ظهور جافا سكريبت مخفيه قويه. على المدى اخترع في عام 2002 من قبل (Stuart Langridge)

فصل السلوك من الترميزية
-----------------------

تقليديا، جافا سكريبت وضعت في كثير من الأحيان متوافقة مع أتش تي أم أل لترميزية. على سبيل المثال، ما يلي هو تطبيق نموذجي للجافا سكريبت

```
 <input type="text" name="date" onchange="validateDate(this);"/>

```

ومع ذلك، فإن الغرض من العلامات هو وصف وثيقة الهيكل، وليس سلوكا برنامجيا.. الجمع بين اثنين يؤثر سلبا على موقع الصيانة لنفس السبب الذي يجمع بين المضمون والعرض: إذا كان الموقع يحتوي على المئات من حقول التاريخ من هذا القبيل، تضاف خاصيّة onchange الملائمة لكلّ واحد (وتعدّلهم لاحقا، في حاله الحاجة) يمكن أن تكون عملية عمل مركّزة.

أن الحلول الخفيه هي لتسجيل معالجات الأحداث الضرورية برمجيا، بدلا من أن تكون مضمونه. وهذاشائع عن طريق تعيين خاصيهCSS محدده لجميع العناصر التي تحتاج إلى اتخاذ إجراءات من قبل البرنامج النصي:

```
 <input type="text" name="date">

```

المخطوطات يمكنها بعد ذلك البحث عن جميع عناصر المدخلات بالتاريخ، وإقامتها وفقا لذلك:

باستخدام جافا سكريبت الأصلي:

```
 
window.onload = function(){ // ينتظر الصفحة للتحميل
 var inputs = document.getElementsByTagName('input'); 
 } (++for(var i=0,l=inputs.length;i<l;i 
 input = inputs[i]; 
 if(input.name &amp;&amp; input.name=='date') 
 input.onchange = function()} 
 validateDate(this);} 
 } } } }; 
function validateDate(){ 
 / / يعمل عندما يكون المحتوى من 'المدخلات' مع اسم 'تاريخ'متغيير.
{

```

النص التالي محدد لمكتبة موتولز:

```
 
window.addEvent('domready', function() { 
 $$('input[name=date]').addEvent('change', function(){ 
 validateDate(this); 
 }); 
}); 
function validateDate(element){ 
 / / يعمل عندما يتغير محتوى 'عنصر'.
}

```

النص التالي هو محدد لمكتبة جي كويري:

```
 
$(document).ready(function(){ //ينتظر الصفحة للتحميل. 
 $('input[name=date]').bind('change', function (){ 
 validateDate(this);
 });
});

function validateDate(element){ 
 / /يعمل عندما يكون محتوى 'عنصر' قد تم تغييره.
}

```

لأن الغرض المقصود من السمة `name` هو لوصف الدور الدلالي للعنصر، وهذا النهج يتسق مع المعايير الحديثة التي ترتكز على الممارسات الترميزية.

تحمل الأخطاء
------------

ويمكن التحقيق من ذلك عن طريق التأكد من الوصلات والأشكال التي يمكن أن تحل بشكل صحيح وليس الاعتماد فقط على Ajax. في الجافا سكريبت، على سبيل المثال في تقديم نموذج يمكن إيقافه باستخدام ("return false"). إذا لم يكن هناك أي خطأ، كود (Ajax)سينفذ وتقديم النموذج سيهمل. إذا كانت أية مشاكل تحدث مع وكيل مستخدم Ajax أو إذا كان المستخدم ليس لديه جافا سكريبت، سيقدم النموذج وتكّون الصيغة التقليدية للعمل.

أفضل الممارسات
--------------

على الرغم من أن جوهر الجافا سكريبت غير مزعجة هو مفهوم طبقة منفصلة السلوك، ودعاة النموذج سيشتركون عموما في عدد من المبادئ ذات الصلة، مثل:

* التقيد الصارم بـ (W3C DOM) ونموذج الحدث، وتجنب متصفح الملحقات الخاصة.
* بصورة أعم، جافا سكريبت من أفضل الممارسات في كثير من الأحيان فهي موازية للغات البرمجة الأخرى، مثل (encapsulation an) abstraction layers), تجنّب المتغيّرات العالمية، اتفاقيات التسمية ذات المغزى، واستخدام أنماط التصميم المناسب، واختبارالمنهجية. ومثل هذه المبادئ ضروريه إلى تطوير البرامج الواسعة النطاق، ولكن لوحظ أنه لم يتم على نطاق واسع في برمجة جافا سكريبت في الماضي وهذا الاعتماد يعتبر عنصرا أساسيا من عناصر جافا سكريبت في الانتقال من كونها لغه ألعاب إلى أداة للتطوير والتنمية الحقيقية.

انظر أيضا
---------

* تحمل الأخطاء
* التحسين التدريجي

المراجع
-------

1. ↑  Keith، Jeremy (20 يونيو 2006). "Behavioral Separation". مؤرشف من الأصل في 2013-01-19.
2. ↑  Olsson، Tommy (6 فبراير 2007). "Graceful Degradation & Progressive Enhancement". مؤرشف من الأصل في 2017-07-18.
3. ↑  Crockford، Douglas (2007-01-24). "The JavaScript Programming Language". مؤرشف من الأصل في 23 يونيو 2018. اطلع عليه بتاريخ أكتوبر 2020. `{{استشهاد ويب}}`: تحقق من التاريخ في: `|تاريخ الوصول=` (مساعدة)
4. ↑  Crockford، Douglas (2006-11-27). "Advanced JavaScript". مؤرشف من الأصل في 30 يونيو 2017. اطلع عليه بتاريخ أكتوبر 2020. `{{استشهاد ويب}}`: تحقق من التاريخ في: `|تاريخ الوصول=` (مساعدة)
5. ↑  Crockford، Douglas (2006-10-20). "An Inconvenient API: The Theory of the Dom". مؤرشف من الأصل في 30 يونيو 2017. اطلع عليه بتاريخ أكتوبر 2020. `{{استشهاد ويب}}`: تحقق من التاريخ في: `|تاريخ الوصول=` (مساعدة)
6. ↑  Crockford، Douglas (2007-06-08). "JavaScript: The Good Parts". مؤرشف من الأصل في 30 يونيو 2017. اطلع عليه بتاريخ أكتوبر 2020. `{{استشهاد ويب}}`: تحقق من التاريخ في: `|تاريخ الوصول=` (مساعدة)
7. ↑  
Quinsey، Peter. "User-Proofing Ajax". مؤرشف من الأصل في 2012-12-20.

| * ع
* ن
* ت
جافا سكريبت |
| --- |
| تحليلات الاكواد | 
* JSHint
* JSLint

 |  |
| مصرفات | 
* كافي سكريبت
* Emscripten
* Google Closure Compiler
* أدوات ويب جوجل
* Morfik
* تايب اسكربت
* AtScript
* Opa
* Haxe
* كلوجر (لغة برمجة)

 |
| المفاهيم | 
* أجاكس
* Client-side
* دي إتش تي إم إل
* مكتبة جافا سكريبت
* قواعد لغة جافا سكريبت
* جافا سكريبت الواضحة

 |
| منقحات | 
* Firebug
* Komodo IDE
* Microsoft Script Debugger
* Microsoft Script Editor
* Opera Dragonfly
* Venkman
* مايكروسوفت فيجوال ستوديو
	+ مايكرسوفت فيجوال ستوديو إكسبريس
* مايكروسوفت مُحرر الشيفرات البرمجية
* سفاري (متصفح ويب)

 |
| مولد وثائق ( Doc generators  ) | 
* جي إس دوك

 |
| محررات (Editors) (comparison) | 
* Ace
* Atom
* Cloud9 IDE
* CodeMirror
* Codenvy
* Koding
* Orion
* مايكروسوفت فيجوال ستوديو
	+ مايكرسوفت فيجوال ستوديو إكسبريس
* مايكروسوفت مُحرر الشيفرات البرمجية
* Visual Studio Online

 |
| محرك جافا سكريبت | 
* Comparison of layout engines
* List of ECMAScript engines
* محرك جافا سكريبت

 |
| إطارات عمل ( إطار عمل ) | 
* مقارنة بين إطارات عمل جافا سكريبت
* List of JavaScript libraries

 |
| تكنولوجيا مرتبطة تكنولوجيا | 
* صفحات الطرز المتراصة
* نموذج كائن المستند
* لغة ترميز النص الفائق
* جسون

 |
| نظام إدارة الحزم (نظام إدارة الحزم) | 
* Npm
* NuGet
* Bower

 |
| جافا سكريبت من جانب الخادم (Server-side) | 
* صفحات خادم نشطة
* كومون جي إس
* JSGI
* نود.جي إس
* Wakanda

 |
| وحدات اختبار (اختبار الوحدة) | 
* Jasmine
* Mocha
* ياسمين (إطار جافا سكريبت)
* QUnit
* List of JavaScript unit testing frameworks

 |
| اشخاص | 
* دوغلاس كروكفورد
* برندان آيخ
* جون ريسج

 |

* أيقونة بوابةبوابة برمجة الحاسوب