سؤال

أقوم بتطوير منصة لتطوير تطبيقات سطح المكتب باستخدام تقنيات الويب. أثناء القيام بذلك ، كنت أحاول الحصول على بعض الوظائف المستند/الجاهزة للعمل مع المتصفح الذي سأدمجه في النظام الأساسي. لهذا السبب كنت قد سألت هذا السؤال هنا سابقًا هنا: JavaScript-Framework-هذا التقدم في المقام الأول-

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

الرمز أدناه له نفس التأثير في هذا المتصفح الذي أستخدمه ببساطة عن طريق تنفيذ وظيفة بعد مهلة 1 ميلي ثانية: يمكنني الكتابة إلى DOM أثناء تحميل الصورة الكبيرة. قد لا يكون هذا هو الحل النهائي بالنسبة لي ، فقد أكتب شيئًا محددًا لكيفية تنفيذ وظيفة DOM بواسطة محرك JavaScript لهذا المتصفح.

ومع ذلك ، قررت أن أرى ما إذا كان هذا يعمل في المتصفحات القياسية ، والكثير لدهشتي ، إنه يعمل! في ضوء ذلك ، سؤالي: هل تطبيقات مختلفة لوظائف DOM/الاستعداد التي توفرها مختلف أطر JavaScript ، ببساطة مبالغة؟

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script>
setTimeout(function() {
    var txtNode = document.createTextNode("ready_yet?");
    var ready_yet_el = document.getElementById("ready_yet");
    ready_yet_el.appendChild(txtNode);
},1);
</script>
</head>

<body>
<div id="ready_yet"></div>
<img src="http://www.ryanmorr.com/tests/ondomready/pic.jpg" />
</body>

</html>

تحرير/مزيد من الأفكار الصفحة المرتبطة بالإجابة على سؤالي السابق ذي الصلة ينص على "بالنسبة لـ Firefox و Opera ، سيحدد فحص بسيط لنوع الحدث ما إذا كان يتم تحميله. سوف يتحقق Safari و IE مع الحالة الجاهزة للوثيقة .... أخيرًا في حالة فشل كل شيء آخر ، سيحضر حدث Onload الجزء الخلفي. " ربما يمكن أن يكون SetInterval مشابهًا لـ setTimeOut الخاص بي أعلاه هو مسار العمل قبل الأخير ، قبل الاعتماد على Onload كملجأ أخير؟ على أي حال ، مع المتصفح القابل للتضمين الذي اخترته ، لا يبدو أن الحدث الذي تم تحميله في DomContentLoad ، ولا Document.ReadyState مدعوم.

هل كانت مفيدة؟

المحلول

حدسك جيد ومؤسس بشكل جيد IMO. ولكن شخص ما ضربك لكمة بالفعل. الجواب المختصر هو ذلك setTimeout هو ليس تنفيذ العمل لاكتشاف الاستعداد DOM في جميع الحالات. قد يكون الأمر على ما يرام بالنسبة لمتصفحك ذي اهتمامك ، لكن أي فشل في بعض الحالات.

قد يثير اهتمامك أن تعرف أن إطار عمل Microsoft الخاص بـ ASP.NET Ajax يستخدم setTimeout خدعة للكشف عن الاستعداد DOM. والمفاجأة ، مفاجأة: يفشل في بعض حالات الاستخدام أيضًا.

باختصار ، يبدو أن المشكلة تكمن في IE مع البرامج النصية البطيئة ، إما بسبب حجم الملف الكبير (على سبيل المثال 500 كيلو) أو زمن انتقال الشبكة/الخادم.

نصائح أخرى

لا ، لأنه عندما تتجلى حشرات DOM "غير المقاومة" ، فإنها تفعل ذلك بطريقة غير عادية بشكل لا يصدق ويصعب التنبؤ بها وتعقب الطرق - كل واحدة (بالطبع) فريدة من نوعها للمتصفح الذي يحدث فيه.

من الأسهل بكثير تجنب تلك المشكلات تمامًا وتعلم أنك ستتعامل دائمًا مع DOM جاهز.

على سبيل المثال ، منذ فترة ، كان لدي دوم غير جاهز في المتصفح المفضل لدى الجميع من أن يتجلى نفسه من خلال العمل بنسبة 99 ٪ تمامًا من الوقت ، لكنني توفيت بأخطاء إذا كان محتوى الصفحة لديه عنصر IMG مع سمة SRC فيه وإذا كان كان للمحتوى أيضًا عنصر UL مع أي عدد من LI في ... لم يكن الأمر كذلك إذا لم يكن أي من هذه الأشياء صحيحًا.

من السهل علي أن أقول حاليا "أوه لقد كانت مشكلة دوم" ولكن في ذلك الوقت ... لا ، ليس من السهل.

ببساطة ، لا. لن يقدر شخص لديه اتصال أبطأ وملفات متعددة للتحميل متصفحه الذي يحاول تشغيل البرامج النصية على عناصر غير موجودة بعد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top