لم اكن قد نمت جيداً اثناء ترجمتى للمقال فترجمت نصفة والآن هاهو النصف الآخر ..
----------
هناك نوع من الغموض هنا، في تلك الأدوات العديدة التى تعمل نفس الشيء، يقفز للخلف إلى فقرة الرد والإستجابة ويبدأمن العنصر الذي يظهر بعده. طرأ على بالى HTML قد يكون عاملا، لذا غيرته ليصبح هكذا:
كود:
<p>
<a name="response" id="response" href="#">
This link will update with the response.</a>
</p>
وبإستعمال نفس الأوضاع، فإن النتائج فى الإختبار الثانى تتغير. على الرغم من اننا لانستخدم الرابط، وتجعل إضافة الخطاف عنصر أكثر تركيزاً ( فى فقرة, او فى خطاف بلا رابط, فيكون لا)، والذى يجعله يبدو انه يعمل بطريقة اكثر نعومة وطواعية مع بعض الأدوات.
النتيجة للإختبار الثانى المعدل
نسختى قارئ الصفحة الرئيسية تتصرفان وكإنما فعلا ذلك من قبل، وإنضموا بواسطة الإتصال بصوت عال، الذي يتصرف كـHPR الآن 3.02 (يعمل، لكن يستمر بالقراءة). نسختى عيون ويندوز تتصرف الآن مثلما تصرفت 5.5 من قبل (يبدأوا بالقراءة من العنصر بعد الرد). لكن في جاوس وهال، يعمل الكود بشكل مثالي نص الرد يتكلم، لكن لا شيء يحدث أكثر من ذلك (ولو أن جاوس يعيد قراءة عنوان الصفحة عالى المستوى أولا، قبل نطق نص الرد).
الإختبار الثالث
في الإختبار الثالث، سنستبدل وضع المكان بتركيز برمجي programmatic focus() يطلب من رابط الرد، عند تجديد النص. وهذا هو كود HTML الجديد:
كود:
<p>
<a href="./" id="response">
This link will update with the response.</a>
</p>
مرة أخرى, لكن بتعديل صغير ضروري على وظيفة onreadystatechange الأصلية (تغييرات سوف تظهر بوضوح)
كود:
request.onreadystatechange = function()
{
if (request.readyState == 4
&& /^(200|304)$/.test(request.status.toString()))
{
response.innerHTML = request.responseText;
response.focus();
}
}
نتيجة الإختبار الثالث
هذا الكود لا يعمل في أي أداة ماعدا جاوس 5.0 ويتصل بالصوت العالى (من الغريب أنه لا يعمل في جاوس 6.2، أى انه نجح فى النسخ السابقة). فشل في العمل في الكثير من وسائل الأدوات الأخرى ولا شئ يحدث على الإطلاق؛ على أى حال، في جاوس 6.2 رابط الإطلاق ستتكلم ثانية، بينما عيون ويندوز تواصل التصرف بالضبط كما فعلت فى الإختبار الثاني المعدل (يبدأ بالقراءة من العنصر بعد الرد).
الإختبار الرابع
يستغنى الإختبار الرابع عن عنصر الرد بشكل عام، ويقدم نص الرد في مربع حوارى بدلا من ذلك. إن الـ HTML رابط إطلاق، بينما وظيفة onreadystatechange تم تبسيطها إلى هذه:
كود:
request.onreadystatechange = function()
{
if (request.readyState == 4
&& /^(200|304)$/.test(request.status.toString()))
{
alert(request.responseText);
}
}
نتائج الإختبار الرابع
يجب ان يكون هذا آمن للجميع, لكن بشكل مدهش انه ليس كذلك: ترى النوافذ 5.0 لا تخرج المربع الحوارى دائما. وأحيانا، تعلن فقط عن المربع، ولا يخبرك ماذا يقول المربع بالضبط.
الإختبار الخامس
فى الإختبار الخامس، سننتقل لتشكيل العناصر. أولا، سنحاول تجديد وتركيز حقل نص:
كود:
<form action="">
<div>
<input type="text" id="response" size="50"
value="This field will update with the response">
</div>
</form>
هاهو التطبيق لوظيفة onreadystatechange :
كود:
request.onreadystatechange = function()
{
if (request.readyState == 4
&& /^(200|304)$/.test(request.status.toString()))
{
response.value = request.responseText;
response.focus();
}
}
نتائج الإختبار الخامس
هذا الإختبار لا يعمل مع قارئ الصفحة الرئيسية أو هال (لايحدث شئ على الإطلاق, ولو انه يوجد إستجابة بصرية مثالية). يفشل أيضا في جاوس 6.2، كما هو الحال مع الإختبار الثالث، يكرر رابط الإطلاق مرة أخرى وقد يعيد الإعلان عن العنوان العالي المستوى أيضا.
يفشل هذا الكود أيضا في عيون ويندوز، الذي يتصرف كما فى فى الإختبار الثالث (وبمعنى آخر: . يبدأ بالقراءة من العنصر بعد الرد). الأنظمة التى تقرأ هذا الكود جاوس 5.0 والإتصال بالصوت العالى، ولو انهم يظهرون "تحرير" أيضا لإعلان حقل التحرير قبل إطلاق قيمته.
الإختبار السادس
في الإختبار السادس، سنفعل تقريبا نفس الشيء. على أى حال، هذه المرة بدلا من تركيز العنصر، نحن سنختار نصه البرمجى:
كود:
request.onreadystatechange = function()
{
if (request.readyState == 4
&& /^(200|304)$/.test(request.status.toString()))
{
response.value = request.responseText;
if (typeof response.createTextRange != 'undefined')
{
var range = response.createTextRange();
range.select();
}
else if (typeof response.setSelectionRange != 'undefined')
{
response.setSelectionRange(0, response.value.length);
}
}
}
نتائج الإختبار السادس
إن نمط النجاح والفشل هنا مطابق إلى الإختبار السابق.
الإختبار السابع
في الإختبار السابع والنهائى سنستعمل زر لعنصر الرد:
كود:
<form action="">
<div>
<button type="button"
id="response">This button will update with the response
</button>
</div>
</form>
بعد ذلك سنغير نص الزر ونركزه أكثر, مثلما فعلنا فى الإختبار الخامس:
كود:
request.onreadystatechange = function()
{
if (request.readyState == 4
&& /^(200|304)$/.test(request.status.toString()))
{
response.firstChild.nodeValue = request.responseText;
response.focus();
}
}
نتيجة الإختبار السابع
هذا الإختبار يخرج نفس النتائج التى حصلنا عليها فى الإختبارين الخامس والسادس, ولكن مع الإختلاف البسيط وهو أن جاوس و الإتصال بالصوت العالى (حيث يعمل الإختبار) بالإعلان عن الإستجابة بواسطة إخراج الزر بعد النص بدلاً من التحرير قبله.
الإستنتاج
لا يبدو اى طريقة موثوقة لإبلاغ قراء الشاشة عن التحديث فى الـ DOM. هناك النظرات التدريجية التي تعمل لواحدة أو أكثر من الأدوات، لكن لا نظرة أو مجموعة عامة يمكنها تغطية الكل، ومعنى ذلك ان حتى الإنذار المتواضع قد لا يعمل بشكل صحيح في عيون ويندوز.
ثم ماذا يعنى ذلك لنا، نحن المطورون, هل هذا يعنى ان نتوقف عن إستخدام تقنية الأجاكس؟
نعم أم لا ! .. سأقوم بترجمة آراء الكاتب بعد قليل..
لكن لنرى آرائكم ..
شوية راحة بقى
<<<< تعب الأخ ,,