فيما يلي، يتم استخدام IE بدلاً من Internet Explorer، ويتم استخدام MF بدلاً من Mozzila Firefox
1. مشكلة document.form.item
(1) المشاكل القائمة:
هناك العديد من العبارات مثل document.formName.item("itemName") في الكود الموجود، والتي لا يمكن تشغيلها ضمن MF.
(2) الحل:
استخدم document.formName.elements["elementName"] بدلاً من ذلك
(3) أخرى
انظر 2
2. مشاكل مع كائنات المجموعة
(1) المشاكل القائمة:
تستخدم العديد من كائنات فئة المجموعة في التعليمات البرمجية الموجودة () عند الوصول إليها، يمكن لـ IE قبول ذلك، لكن MF لا يمكنه ذلك.
(2) الحل:
استخدم [] للاشتراك بدلاً من ذلك. على سبيل المثال: تم تغيير document.forms("formName") إلى document.forms["formName"].
مثال آخر: تم تغيير document.getElementsByName("inputName")(1) إلى document.getElementsByName("inputName")[1]
(3) أخرى
3.window.event
(1) المشاكل القائمة:
لا يعمل على MF باستخدام window.event
(2) الحل:
لا يمكن استخدام حدث MF إلا في مكان وقوع الحدث، ولا يمكن حل هذه المشكلة بعد. ويمكن تغييره مثل هذا:
الكود الأصلي (يمكن تشغيله في IE):
<input type = "button" name = "someButton" value = "إرسال" عند النقر = "javascript:gotoSubmit ()"/>
...
<لغة البرمجة = "جافا سكريبت">
وظيفة gotoSubmit() {
...
تنبيه (window.event)؛ // استخدم window.event
...
}
</script>
كود جديد (يمكن تشغيله في IE وMF):
<input type = "button" name = "someButton" value = "Submit" onclick = "javascript:gotoSubmit(event)"/>
...
<لغة البرمجة = "جافا سكريبت">
وظيفة gotoSubmit(evt) {
evt = evt ? evt : (window.event ? window.event : null);
...
تنبيه (EVT)؛ // استخدم EVT
...
}
</script>
بالإضافة إلى ذلك، إذا لم يتغير السطر الأول من الكود الجديد وكان هو نفس الكود القديم (أي أن استدعاء gotoSubmit لا يعطي معلمات)، فسيظل يعمل فقط في IE، ولكن لن يحدث أي خطأ. لذلك، لا يزال جزء tpl من هذا الحل متوافقًا مع الكود القديم.
4. مشكلة استخدام معرف كائن HTML كاسم للكائن
(1) المشاكل القائمة
في IE، يمكن استخدام معرف كائن HTML مباشرة كاسم متغير للكائن الثانوي للمستند. غير ممكن في MF.
(2) الحل
استخدم getElementById("idName") بدلاً من idName كمتغير كائن.
5. مشكلة في الحصول على الكائن باستخدام سلسلة idName
(1) المشاكل القائمة
في IE، يمكنك استخدام eval(idName) للحصول على كائن HTML بالمعرف idName، ولكن ليس في MF.
(2) الحل
استخدم getElementById(idName) بدلاً من eval(idName).
6. المشكلة هي أن اسم المتغير هو نفس معرف كائن HTML
(1) المشاكل القائمة
في MF، نظرًا لعدم استخدام معرف الكائن كاسم لكائن HTML، يمكنك استخدام نفس اسم المتغير مثل معرف كائن HTML، ولكن ليس في IE.
(2) الحل
عند الإعلان عن المتغيرات، قم دائمًا بإضافة var لتجنب الغموض، حتى تتمكن من العمل بشكل طبيعي في IE.
بالإضافة إلى ذلك، من الأفضل عدم استخدام نفس اسم المتغير كمعرف كائن HTML لتقليل الأخطاء.
(3) أخرى
راجع السؤال 4
7. مشكلات Event.x وevent.y
(1) المشاكل القائمة
في IE، يحتوي كائن الحدث على سمات x وy، ولكن ليس في MF.
(2) الحل
في MF، ما يعادل events.x هو events.pageX. لكن events.pageX غير متوفر في IE.
لذلك، يتم استخدام events.clientX بدلاً من events.x. هذا المتغير موجود أيضًا في IE.
هناك اختلافات طفيفة بين events.clientX وevent.pageX (عندما تحتوي الصفحة بأكملها على أشرطة تمرير)، ولكنها متساوية في معظم الأوقات.
إذا كنت تريد أن يكون الأمر كما هو تمامًا، فيمكنك أن تواجه المزيد من المشاكل:
mX=event.x ?event.x :event.pageX;
ثم استخدم mX بدلاً من events.x
(3) أخرى
Event.layerX موجود في كل من IE وMF ولم يتم اختبار ما إذا كان المعنى المحدد مختلفًا.
8. حول الإطار
(1) المشاكل القائمة
في IE، يمكنك استخدام window.testFrame للحصول على الإطار، ولكن ليس في mf.
(2) الحل
الفرق الرئيسي بين mf و ie في استخدام الإطار هو:
إذا تمت كتابة السمات التالية في علامة الإطار:
<frame src="xx.htm" id="frameId" name="frameName" />
ثم، على سبيل المثال، يمكن الوصول إلى كائن النافذة المطابق لهذا الإطار من خلال المعرف أو الاسم، بينما يمكن لـ mf الوصول فقط إلى كائن النافذة المطابق لهذا الإطار من خلال الاسم، على سبيل المثال، إذا تمت كتابة علامة الإطار أعلاه في htm داخل النافذة العلوية يمكن الوصول إليه بهذه الطريقة
على سبيل المثال: window.top.frameId أو window.top.frameName للوصول إلى كائن النافذة هذا
mf: لا يمكن الوصول إلى كائن النافذة هذا إلا من خلال window.top.frameName،
بالإضافة إلى ذلك، يمكن استخدام window.top.document.getElementById("frameId") في كل من mf وie للوصول إلى علامة الإطار وwindow.top.document. getElementById("testFrame").src = 'xx.htm' لتبديل محتوى الإطار، يمكنك أيضًا استخدام window.top.frameName.location = 'xx.htm' لتبديل محتوى الإطار وصف الإطار والنافذة، راجع مقالة "النافذة والإطار" في bbs والاختبارات الموجودة ضمن الدليل /test/js/test_frame/
----adun 2004.12.09 التعديل
9. في mf، يجب الحصول على السمات التي حددتها بنفسك بواسطة getAttribute()
10. لا يوجد ParentElement parement.children في mf ولكن يستخدم
parentNodeparentNode.childNodes
يختلف معنى رمز ChildNodes في IE ويستخدم MF مواصفات DOM، وسيتم إدراج العقد النصية الفارغة في ChildNodes.
بشكل عام، يمكن تجنب هذه المشكلة من خلالNode.getElementsByTagName().
عندما تكون العقدة مفقودة في html، يفسر IE و MF العقدة الأم بشكل مختلف، على سبيل المثال
<النموذج>
<الجدول>
<الإدخال/>
</الجدول>
</النموذج>
قيمة input.parentNode في MF هي النموذج، بينما قيمة input.parentNode في IE هي
عقدة
فارغة
مشكلة .const
(1) المشاكل القائمة:
لا يمكن استخدام الكلمة الأساسية const في IE. مثل const constVar = 32؛ هذا خطأ في بناء الجملة في IE.
(2) الحل:
لا تستخدم const، استخدم var بدلاً من ذلك.
12. كائن الجسم
يوجد نص MF قبل أن يقرأ المتصفح علامة النص بالكامل، بينما يجب أن يكون IE موجودًا بعد قراءة النص بالكامل.
13. ترميز عنوان url
في js، إذا كتبت عنوان url، فما عليك سوى كتابة "لا تكتب". على سبيل المثال، var url = 'xx.jsp?objectName=xx&objectEvent=xxx';
frm.action = url، فمن المحتمل جدًا ألا يتم عرض عنوان url بشكل طبيعي ولن يتم نقل المعلمات بشكل صحيح إلى الخادم. بشكل عام، سيبلغ الخادم عن خطأ بعدم العثور على المعلمة، بالطبع إذا كان في tpl، لأن tpl يتوافق مع مواصفات xml، والمتطلبات & مكتوبة كـ &
بشكل عام، لا يمكن لـ MF التعرف على &
14. مشكلة العقدة واسم العلامة
(1) المشاكل القائمة:
في MF، تحتوي جميع العقد على قيمة NodeName، لكن textNode لا تحتوي على قيمة tagName. في IE، يبدو استخدام NodeName
هناك مشكلة (لم أختبر الموقف المحدد، ولكن IE الخاص بي قد مات عدة مرات).
(2) الحل:
استخدم tagName ولكن يجب اكتشاف ما إذا كان فارغًا.
15. سمات العنصر
السمة input.type للقراءة فقط ضمن IE، ولكن يمكن تعديلها ضمن MF.
16. مشاكل مع document.getElementsByName() و document.all[name]
(1) المشاكل القائمة:
في IE، لا يمكن استخدام getElementsByName() و document.all[name] للحصول على عناصر div (ليس من المعروف ما إذا كانت هناك عناصر أخرى لا يمكن الحصول عليها).