مدونة علم البرمجة والحاسوب
من حقك ان تتعلم اكثر

دورة جافا سكربت - Javascript الدرس التاسع



محتوى الفصل التاسع

*** عملية التأكيد
*** عملية الادخال
*** الانتقال بين الصفحات
*** اهميه تحديد موضع الاطار
*** التحميل
*** استخدام شريط الحاله
*** الاطارات المنبثقه
*** سمات الاطارات المنبثقه
*** اغلاق الاطار المنبثق
*** ضبط حجم الاطار
*** مصفوفه المقاطع
*** كيفيه الوصول الى مقاطع الاطار
*** معالجه الاخطاء



عملية التاكيد

تعتبر خاصيه alert() بمثابه تقنيه تابعه لكائن window ولذلك ويمكن كتابتها كالاتي

window.alert() وتعتبر تقنيه window.confirm بمثابه التقنيه الاولى في التقنيتين

الخاصتين بكائن window والتي تعرض مربعات نصيه عند استدعائها ويمكن استخدامها للحصول

على تاكيد من المستخدم في مربع الحوار الذي يحتوي على زر Ok الذي يقوم بعرض true

اوزر Cancel الذي يقوم بعرض false للنص البرمجي يجب ان يتم تعيين وسيط واحد في

التقنيه كسلسله نصيه تحتوي على سؤال موجه للمستخدم من اجل التاكيد ويوضح المثال

التالي تقنيه window.confirm التي تقوم بالتقسيم الشرطي لتحديد سلسله الرساله

التي يتم كتابتها طبقا للزر الذي سينقره المستخدم في مربع حوار التاكيد



كود PHP:
var ask comfirm("Do you wish to proceed?");

var 
msg;

if(
ask)msg="OK button was pushed";

else 
msg "Cancel button was pushed";
document.write(msg); 

**** ملاحظه ****

وفي هذا المثال تعتبر ask بمثابه اختصار لـ (true==ask)


عمليه الادخال

تستخدم تقنيه window.prompt() لاتاحه امكانيه ادخال البيانات الخاصه بالمستخدم

من لوحه المفاتيح عبر مربع حوار يحتوي على زري OK و Cancel وتحتاج هذه التقنيه الى

اسم المستخدم لتحديد الرساله التي سيتم عرضها وقيمه افتراضيه خاصه بحقل النص واذا لم

يتوافر اسم المستخدم في النص الافتراضي فلن يتم تحديد الرساله ويقوم مربع الحوار بعرض

القيمه الخاصه بحقل النص عندما يقوم المستخدم بالضغط على زر OK كما هو موضح في المثال

الذي يقوم باخذ مدخلات المستخدم لتخصيص محتويات الصفحه


كود PHP:
<SCRIPT TYPE="text/javascript">

<!--

var 
user prompt("Please enter your name...","");

if(
user==null||user=="")user="visitor";
document.write("Hi "+user+",welcom to this page");
//-->
</SCRIPT> 

**** ملاحظه ****

يقوم النص البرمجي بتعيين قيمه visitor اذا لم يتم ادخال اسم المستخدم


اهميه تحديد موضع الاطار

يحتوي كائن window.location على العنوان الكامل الخاص بالمستند الذي يتم تحميله في المتصفح

كما انه يقوم بتخزين العنوان الكامل في خاصيه window.location.herf وتحديد قيمه جديده

له او الكائن window.location نفسه الذي سيقوم بتحميل العنوان في المتصفح ويتكون العنوان

المثالي من الاجزاء التاليه :


كود PHP:
protocol://host/pathname?#hash 

ويتم عرض كل اجزاء العنوان المخزنه في كائن window.location بطريقه فرديه باستخدام

خاصيه location المناسبه كما هو موضح في المثال التالي


كود PHP:
<SCRIPT TYPE="text/javascript">

<!--

var 
locn "Href:"+location.href;

var 
port "Protocol:"+location.protocol;

var 
host "Host:"+location.host;

var 
path "Path:"+location.pathname;

var 
hash "Hash:"+location.hash

alert
(locn+"\n"+port+"\n"+host+"\n"+path+"\n"+hash);
//-->
</SCRIPT> 

**** ملاحظه ****

عند تحديد قيمه جديده لخاصيه location.hash يتنقل المتصفح الى الموقع المحدد في الصفحه


الانتقال بين الصفحات

يحتوي كائن window.history على مصفوفه خاصه بعناوين المواقع التي قمت بزيارتها سابقا

في احدى نوبات العمل داخل المتصفح ولاسباب امنيه لايتم قرائتها بطريقه مباشره ولكنها تستخدم

في الرجوع الى الصفحات السابقه وتقوم تقنيتي back و forward الخاصه

بكائن window.history بنفس وظيفيه ازرار Backward و Forward في المتصفح ويمكن الحصول

على مزيد من المرونه في عمليه الانتقال باستخدام تقنيه window.history.go التي تقوم

بتحديد وسيط واحد من اجل تحديد الموقع من خلال عنوان تقريبي على سبيل المثال ستقوم قيمه

الوسيط 1- بالعوده الى الصفحه السابقه وتعمل قيمه 2- على اعاده فتح الصفحه التي تسبقها

وبنفس الطريقه فان قيمه الوسيط window.history.go(1) ستنتقل الى الصفحه التاليه في مصفوفه

history الخاصه بالعناوين ويعمل استدعاء قيمه الوسيط window.history.go على اعاده تحميل

المستند الحالي وفي حاله قيام المستخدم بحذف الصفحه السابقه فان هذا المثال التالي سبيقوم

باسترجاع الصفحه السابقه من اجل تكمله حقل النص


كود PHP:
if(required_input=="")history.go(-1); 

التحميل

يستخدم كائن window.onload في تحديد اسم الداله التي يتم استدعاؤها في الحال بعد ان

يتم تحميل المستند في المتصفح وتقوم الداله init() بتعيين قيمة للكائن وغالبا ما تستخدم

في تعيين عدد من القيم داخل نص البرمجه من الافضل ان تحتوي الصفحه على عدد كبير من الصود

الرسوميه التي تحتاج الى بعض الوقت في تحمليها واذا قام النص باستخدام هذه الصور فمن

الضروري ان تقوم بانهاء التحميل قبل ان يبدا تشغيل النص وتقوم سمه onload في html

التي قد تكون مدرجه في علامه الترميز body بتحديد داله onload ولذلك يجب ان تكون حذرا

حتى لا تقوم بحذف الداله بالاخرى من خلال الكتابه عليها وينطبق هذا على كائن

window.onunload وسمه onload التي تقوم بتحديد الداله بهدف استدعائها عندما ينتقل

المستخدم الى الموقع الجديدويقوم كائن window.onunload باستدعاء الداله التي تقوم

بانشاء اطار منبثق عندما يغادر المستخدم موقع الويب ويقوم المثال التالي بعرض مربع

حوار التحذير عندما يخرج المستخدم من هذه الصفحه


كود PHP:
<SCRIPT TYPE="text/javascript">

<!--

function 
goodbye(){
alert("Thanks for calling - Come back soon");

}
window.onunload goodbye;
//-->
</SCRIPT> 

استخدام شريط الحاله

يمكن استخدام كائن window.status لعرض الرساله في شريط الحاله الخاص

باطار المتصفح الى ان تقوم سمه اخرى في المستند المعروض بوضع رساله جديده

في شريط الحاله او يتم ارجاع شريط الحاله الى الوضع الافتراضي يمكن تحديد

الرساله الافتراضيه باستخدام window.defaultStatus وحتى يمكن عرض الرساله عندما يقوم

المستخدم بوضع المؤشر على الارتباط التشعبي فان سمه html في onmouseover يجب ان

تقوم بتحديد الرساله حتى يتم عرضها كما انها يجب ان تقوم بعرض true لمنع عنوان

الرابط من الظهور في شريط الحاله كما يحدث دائما

يقوم هذا المثال الذي يستخدم جافا سكربت داخل علامات الترميز html بتحديد الرساله

الافتراضيه واضافه onmouseover للرابط الذي يقوم بعرض رساله اخرى اثناء وجود المؤشر

على الرابط


كود PHP:
<BODY ONLOAD "window.defaultStatus = 'Status Demo'">

<
A HREF ="nextpage.htm"
ONMOUSEOVERN ="window.status='Click Here';return true">
Hypertext Link</A

الاطارات المنبثقه

تعتبر القدره على فتح اطار ثان في المتصفح لعرض عنوان موقع آخر من السمات الخاصه بالمتصفح

والتي يمكن الاستفاده منها في لغه جافا سكربت ويمكن حدوث ذلك من خلال الاستعانه بتقنيه

window.open() التي تتطلب ثلاثه وسائط لتحديد عنوان الموقع الذي سيتم تحميله في الاطار

المنبثق وكذلك اسم الاطار والسمات المطلوبه وتعتبر الاطارات المنبثقه اصغر من الاطارات

الاصليه كما انها تحتوي على استخدامات عديده تشمل عرض الصور الكبيره من خلال الضغط

على روابط خاصه بها في الصور الصغيره يقوم المثال التالي بفتح الاطار الفرعي

والذي يتبع في تحميله نفس خطوات الاطار الاول


كود PHP:
<SCRIPT TYPE="text/javascript">

<!--

function 
popup(){
window.open("popup.html","",
"top=40,left=40,width=200,height=100");

}
window.onload=popup;
//-->
</SCRIPT> 

سمات الاطارات المنبثقه

قد يقوم الوسيط الثالث في تقنيه window.open بتحديد العديد من السمات التي سيتم ادراجها

في الاطار الجديد من القائمه

السمه Directories وظيفتها اضافه شريط الروابط

السمه Height وظيفتها يقوم بتحديد الارتفاع في مساحه المستند باستخدام وحدات البكسل

السمه Left وظيفتها احداثي x الخاص بالاطار على الشاشه

السمه Location وظيفتها اضافه شريط العنوان

السمه Menubar وظيفتها اضافه اشرطه القوائم القياسيه

السمه Resizable وظيفتها يسمح بالتحكم في حجم الاطار

السمه Scrollbars وظيفتها الحصول على اشرطه التمرير عند الحاجه اليها

السمه Status وظيفتها اضافه شريط الحاله

السمه Toolbar وظيفتها اضافه شريط الازرار مع كل من زر back وزر forward

السمه Top وظيفتها احداثي y الخاص بالاطار على الشاشه

السمه Width وظيفتها يتحكم في العرض باستخدام وحدات البكسل في مساحه المستند

تحتاج سمات الابعاد الخاصه بالارتفاع والعرض والطول الى تحديد قيمه وحدات البكسل

يمكن لجميع السمات الاخرى ان تحتوي على قيمه yes او no ولكن اذا ظهرت السمه في الوسيط

يتم تعيين yes كقيمه افتراضيه في الوسيط ولذلك فان القيمه لا تكون بحاجه لتحديدها

على سبيل المثال حتى تقوم باضافه شريط حاله الى الكود في الصفحه المقابله

فانك ستكون بحاجه الى اضافه status الى قائمه السمات


كود PHP:
function popup(){
window.open("popup.html","","top=40,left=40,width=200,height=100,status");


اغلاق الاطار المنبثق

يمكن للاطار ان يغلق نفسه من خلال استدعاء تقنيه windoe.close() ولكن اغلاق اطار منبثق يتطلب

ايضا الى جانب هذا مجهود بسيطا يجب ان يتم تخصيص الاستدعاء الاول لتقنيه window.open

لمتغير معين لانشاء كائن window ويكتسب كائن window الجديد تقنيه windoe.close

التي يمكن استخدامها في اغلاق الاطار المنبثق ويقوم المثال التالي بالتحقق من وجود

اطار منبثق قبل اغلاقه عندما يخرج المستخدم من الاطار الرئيسي


كود PHP:
<SCRIPT TYPE="text/javascript">

<!--

var 
popwindow;

function 
popup(){
popwindow window.open("popup.html","","top=40,left=40,width=200,height=100,directories,location,menubar,resizable,scrollbars,toolbar");

}

function 
close_popup() {

if(
popwindow != null)popwindow.close();

}
window.onload popup;
window.onunload close_popup;
//-->
</SCRIPT> 

ضبط الحجم

يمكن للمستخدم ان يقوم بالتحكم في درجه وضوح الشاشه من خلال خصائص الارتفاع والعرض الخاصه

بكائن window.screen ونظرالان الاطار قد لا يتم تكبيره بشكل كلي يجب ان تقوم بتحديد

العرض الداخلي للاطار وتحتوي التشكيلات لخاصه بالكائن document في ادوات التصفح على

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

يكون مطلوبا في المثال التالي تقوم لغه جافا سكربت بتحديد درجه الوضوح والحجم

الداخلي للاطار لكل من المتصفحين


كود PHP:
if(document.all){  //Internet Explorer
var win_w window.document.body.clientWidth;

var 
win_h window.document.body.clientHeight;

}

if(
document.layers){ //Netscape
win_w window.innerWidth;
win_h window.innerHeight;

}

if(
document.all || document.layers){

var 
scr_w window.screen.width;

var 
scr_h window.screen.height;

var 
res "Resolution:"+scr_w+"x"+scr_h;

var 
iwin "Innerwindow:"+win_w+"x"+win_h;
alert(res+"\n"+iwin);


****ملاحظه ****

قم باستدعاء تقنيه window.print() لطبع المستند في اطار المتصفح


مصفوفه المقاطع

يحتوي كائن window.frames على مصفوفه خاصه بجميع المقاطع في الاطارات التي تم تعريفها

داخل علامات ترميز frameset الموجوده في html ويمكن للغه جافا سكربت ان تقوم بعرض

علامات الترميز من داخل اي مقطع باستخدام تركيب parent.window.frames ويمكن عرض المقاطع

الفرديه باستخدام ارقام الفهارس الخاصه بها في

المصفوفه او القيمه التي تم تحديدها في سمه name داخل علامه الترميز frame التي

كتابتها بلغه html ولذلك فان اي مقطع يحمل اسم main يمكن ان يتم عرضه من داخل اي مقطع

اخر عن طريق parent.window.frames.main ويتم تشغيل الكود في المثال التالي من

داخل المقاطع لقراءة الاسماء الخاصه بكل المقاطع في الاطار


كود PHP:
var framenums "No.frames:"
+parent.window.frames.length;

var 
framenames "\nFrame1:"
+parent.window.frames[0].name;

var 
framenames+= "\nFrame2:"
+parent.window.frames[1].name;

var 
framenames+= "\nFrame3:"
+parent.window.frames[2].name;
alert(framenums+framenames); 

**** ملاحظه ****

عند تعيين اسماء لجميع العناصر التي تم كتابتها بلغه html حتى يتم استخدامها من خلال

جافا سكربت فانه يتم انشاء كود سهل القراءه


كيفيه الوصول الى المقاطع داخل الاطار

يمكن لهذا النص البرمجي ان يقوم بتحديد القيم في خصائص الكائن واستخدام التقنيات الخاصه

بها كم هو الحال في الاطار الذي لا يحتوي على مقاطع يحتوي مقطع الاستعراض من الجانب الايسر من

الشاشه على ازرار تقوم عند الضغط عليها بتحديد عناوين المواقع الجديده للاطار الرئيسي

على الجانب الايمن من الشاشه ويقوم هذا المثال بتكمله المثال السابق الذي يقوم بعمليه

كتابه النص لمقطع hdr واضافه داله لتغيير الموقع الخاص بالمقطع btm


كود PHP:
function next(){
parent.frames.btm.window.location "nextpage.htm";

}

function 
write_header(){

var 
msg "Frame2<br>Written by Frame1";
parent.frames.hdr.window.document.write(msg);

}
window.onload write_header

معالجة الاخطاء

يمكن تعيين داله مخصصه للتعامل مع الاخطاء لكائن window.onerror من اجل تصحيح الاخطاء

التي تحدث في وقت التشغيل فعندما يواجه المتصفح ايه اخطاء فانه يقوم بالبحث عن معالج

الاخطاء في النص البرمجي ولكن اذا لم يجده فانه يقوم بمعالجه الاخطاء بنفسه من خلال

فتح مربع حوار browser error وعند اكتشاف الخطا يتم عرض قيمه true في المتصفح

للاشاره الى ان الخطا قد تم تصحيحه وحتى يمكنك تجنب ايه اخطاء فان الداله المخصصه للتعامل

مع الخطأ تقوم بعرض قيمه true عند اكتشاف الخطأ ويقوم المتصفح بتعيين ثلاثه وسائط

لمعالج الاخطاء حيث تحتوي هذه الوسائط على معلومات خاصه بنوع الخطأ وكذلك عنوان الموقع الخاص

بالملف الذي يحتوي على الخطأ ورقم السطر الفعلي في هذا الملف الذي يحتوي على الخطأ

وفي هذا المثال التالي يتم تعيين كل معلومه خاصه بالخطا في داله error-handler

من خلال المتصفح من اجل مصلحه المستخدم


كود PHP:
<SCRIPT TYPE="text/javascript">

<!--
window.onerror errorhandler;

function 
errorhandler(msg,url,ln){
alert("Error:"+msg+"\nIn File:"+url+"\nAt Line:"+ln);  return true;

}
//This is a deliberate mistake
document.form[theMistake].value="myButton";
//-->
</SCRIPT> 

انتهى الفصل التاسع

والله يوفق الجميع ان شاااااااء الله

أرشيف المدونة الإلكترونية

من انا ؟