جافا سكريبت جهة المستخدم

**جافا سكريبت جهة المستخدم** (Client-Side JavaScript - CSJS) تتمثل في البرمجة بلغة جافا سكريبت على جانب المستخدم. وعلى الرغم من أن لغة جافا سكريبت طُورت أصلاً للعمل على جهة المستخدم، فقد ظهر هذا المصطلح للتمييز بينها وبين استخدامها المتزايد على جهة الخادم (Server-Side JavaScript - SSJS) من خلال محركات مثل Node.js.

## بيئة جافا سكريبت جهة المستخدم
الصيغة (application/javascript) هي نوع من أنواع الإعلانات الإنترنتية لكود مصدر جافا سكريبت، وقد تم تسجيلها في عام 2006. لكن هذا النوع لا يحظى بدعم كامل من جميع المتصفحات الرئيسية. فعلى سبيل المثال، يتجاهل متصفح إنترنت إكسبلورر (الإصدارات من 6 إلى 8) النصوص التي تحمل السمة type="application/javascript"، بينما تُدعم صيغة text/javascript -الموجودة في مواصفات HTML 4.01 وHTML 5- من جميع المتصفحات الرئيسية وهي الأكثر شيوعًا في الاستخدام. ووفقًا لمواصفات HTML 5، إذا لم يتم تحديد السمة type في علامة نصية، فإن القيمة الافتراضية تكون application/javascript.

لتضمين كود جافا سكريبت في ملفات HTML، يجب أن يُحاط الكود بعلامتي  و، مع إمكانية حذف خيارات السمات (attributes) إذا لزم الأمر.

تتطلب المتصفحات القديمة عند كتابة جافا سكريبت البدء بالكود التالي:
```js
<script language="JavaScript" type="text/javascript">
```
والاختتام ب:

  **←// </script>**

رمز التعليقات الموضحة () ضروري لضمان عدم معالجة الكود أو عرضه كنص في المتصفحات القديمة جدًا التي لا تتعرف على علامة  في ملفات HTML. ومع ذلك، عندما تُدرج علامة  ضمن قسم ، لا يمكن معالجتها، وبالتالي قد لا تكون علامات التعليقات ضرورية دائمًا. أما في ملفات XML/XHTML، فإن علامة  لن تعمل إذا وُضعت ضمن تعليقات موضحة، حيث تتجاهل الموزعات المتوافقة مع XML/XHTML التعليقات، وقد تواجه مشكلات مع علامات مثل -- أو  في النصوص البرمجية (مثل عمليات تناقص العدادات أو المقارنة). لذا، يجب أن تحتوي ملفات XHTML على نصوص مشفرة كأجزاء XML CDATA، يسبقها:

ويلي ذلك الكود الكود التالي:
```js
<script type="text/javascript">
//<![CDATA[
```
**ويليها:**
```js
//]]>
</script>
```
**(الرمز المزدوج // في بداية السطر يُعيّن تعليقات موضحة لمنع تحليل CDATA]]> و<// من قبل النص البرمجي).**

أسهل طريقة لتجنب هذه المشكلة -وكذلك كأفضل الممارسات- هي استخدام نص خارجي كالتالي:
```js
<script type="text/javascript" src="hello.js"></script>
```
تاريخيا ،يستخدم الرمز (attribute language)الغير قياسي(non-W3C)في السياق التالي:
```js
<script language="JavaScript" src="hello.js"></script>
```
يمكن لعناصر HTML 2 أن تحتوي على أحداث فعلية تتيح التعامل مع المعالج النصي. لكتابة كود فعال في HTML 4.01، يجب أن يُرجع خادم الويب نوع المحتوى النصي Content-Script-Type بقيمة text/javascript. وإذا لم يتمكن خادم الويب من ذلك، يمكن لكاتب الموقع اختياريًا إدراج الإعلان التالي للغة البرمجة النصية الافتراضية في قسم رأس الملف:
```js
<meta http-equiv="Content-Script-Type" content="text/javascript">
```


## مثال(أهلا بالعالم)
لتوضيح البرنامج التقليدي "أهلاً بالعالم"، انظر إلى برنامج "أهلاً بالعالم". هذه هي أبسط طريقة لتنفيذه باستخدام دعم المتصفحات الشائعة لبروتوكول javascript: لتنفيذ كود جافا سكريبت. أدخل ما يلي كعنوان URL (عادة يُلصق في شريط العناوين):
```javascript
javascript:alert('Hello, world !');
```


## محتويات نموذج غرض المستند(DOM)
### تفاعلات المستخدم
أكثر التفاعلات مع المستخدم تتم باستخدام أشكال أتش تي أم أل التي يمكن الوصول إليها من خلال نموذج غرض المستند لاتش تي ام ال (HTML DOM). ومع ذلك فان هناك أيضا بعض الوسائل البسيطة للتواصل مع المستخدم:
* •مربع الحوار لغرض التنبيه
* •مربع الحوار لغرض التأكيد ومربع الحوار لغرض التوجيه
* شريط الحالة
* • لوحة المحاوره console

### الأحداث
عقود العنصر (Element nodes)قد تكون المصدر لمختلف الأحداث التي يمكن أن تسبب النشاطات إذا كانت معالجات هذه الأحداث مسجلة. دوال معالجات هذه الأحداث غالبا ما تعرف كدوال مجهولة حيث تعرف مباشرة داخل عقود العنصر (Element nodes).

## اللاتوافقية
ملاحظة: معظم حالات عدم التوافق ليست من قضايا لغة الجافا سكريبت بل هي بالتحديد لنموذج غرض المستند (DOM). تطبيقات لغة الجافا سكريبت لمتصفحات الويب الحديثة والأكثر شيوعا عادة ماتلتزم بمعايير ECMAScript القياسية، حيث أن معظم حالات عدم التوافق هي جزء من تطبيق (نموذج غرض المستند) (DOM). هناك بعض القضايا المعارضة موجوده عبر تطبيقات لغة الجافا سكريبت وتشمل التعامل مع عدد من القيم البدائية مثل "غير معروف" والتعامل مع الطرق المتوفره التي قدمت في الإصدار الأخير من ECMAScript مثل ()pop()),push(), sheft(), unshift وطرق المصفوفات المختلفة.

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

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

## مكافحة عدم التوافق
هناك نوعان من التقنيات الأساسية لمعالجة عدم التوافق:تحسس المتصفح (browser sniffing)واكتشاف الكائنات (object detection). عندما لم يكن هناك سوى اثنين من المتصفحات التي لديها قدرات البرمجة (نتسكيب، وإنترنت إكسبلورر) ،حينها كان أسلوب (browser sniffing) هو الأسلوب الأكثر جاذبية. باختبار عدد من خصائص المستخدم والتي تنتج معلومات عن تجهيزات الحاسب والمتصفح ومعلومات الإصدارات يكون في إمكان النص التبين بالضبط في اي مستعرض يتم تنفيذ البرنامج. مؤخرا أصبح أسلوب تحسس المتصفح(browser sniffing) أكثر صعوبة في التنفيذ عندما بدأ إنترنت إكسبلورر يعطي معلومات متصفح غير دقيقة وعلى نحو متزايد (الأسباب وراء ذلك ما زالت غير واضحة). وكذلك فان هذا الأسلوب شكل من أشكال الفن القديم صعب التطبيق حيث أصبح يوجد كثير من المتصفحات النصية المعروضه في الأسواق، ولكل منهما تجهيزاته الخاصة وجهاز عميله الخاص ومعلومات الإصدار الخاصة به.

تقنية الكشف عن الكائن (object)تعتمد على اختبار وجود خاصية الكائن.

  **(function set_image_source (imageName, imageURL**

  **}**

  **(if (document.images** 
                    
  **}**
 document.images[imageName].src = imageURL
 {
 {

وهناك مثال أكثر تعقيدا ويعتمد على استخدام اختبارات الربط المنطقية:

(if (document.body & & document.body.style

في ما سبق، فإن الجمله document.body.style من شأنها عادة ان تسبب خطأ في المتصفح التي ليس لديها خاصية " document.body "، ولكن باستخدام الرمز المنطقي &amp;&amp; فانه يضمن عدم مناداة document.body.style عند عدم توفر الخاصيه document.body". هذه التقنية السابقة تسمى تقنية التقييم الأدنى. حاليا، مزيج من تقنية تحسس المتصفحات (browser sniffing)،وتقنية الكشف عن الكائنات object detection، والاعتماد على المعايير مثل مواصفات ECMAScript وصفحات الطرز المتراصة (CSS) تستخدم جميعها بدرجات متفاوتة، في محاولة لضمان ألا يرى المستخدم أبدا رسائل لأخطاء في لغة الجافا سكريبت.

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