ต่อไปนี้ใช้ 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="Submit" onclick="javascript:gotoSubmit()"/>
-
<ภาษาสคริปต์ = "จาวาสคริปต์">
ฟังก์ชั่น gotoSubmit() {
-
alert(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);
-
alert(evt); // ใช้ evt
-
-
</สคริปต์>
นอกจากนี้ หากบรรทัดแรกของโค้ดใหม่ไม่เปลี่ยนแปลงและเหมือนกับโค้ดเก่า (นั่นคือ การเรียก gotoSubmit ไม่มีพารามิเตอร์) โค้ดจะยังคงทำงานใน IE เท่านั้น แต่จะไม่มีข้อผิดพลาดเกิดขึ้น ดังนั้นส่วน tpl ของโซลูชันนี้ยังคงเข้ากันได้กับโค้ดเก่า
4. ปัญหาการใช้รหัสของวัตถุ HTML เป็นชื่อวัตถุ
(1) ปัญหาที่มีอยู่
ใน IE รหัสของวัตถุ HTML สามารถนำมาใช้โดยตรงเป็นชื่อตัวแปรของวัตถุรองของเอกสาร เป็นไปไม่ได้ใน MF
(2) วิธีแก้ปัญหา
ใช้ getElementById("idName") แทน idName เป็นตัวแปรอ็อบเจ็กต์
5. ปัญหาในการรับวัตถุโดยใช้สตริง idName
(1) ปัญหาที่มีอยู่
ใน IE คุณสามารถใช้ eval(idName) เพื่อรับวัตถุ HTML ที่มี id idName แต่ไม่ใช่ใน MF
(2) วิธีแก้ปัญหา
ใช้ getElementById(idName) แทน eval(idName)
6. ปัญหาที่ชื่อตัวแปรเหมือนกับ ID ของวัตถุ HTML
(1) ปัญหาที่มีอยู่
ใน MF เนื่องจากรหัสวัตถุไม่ได้ใช้เป็นชื่อของวัตถุ HTML คุณสามารถใช้ชื่อตัวแปรเดียวกันกับรหัสวัตถุ HTML ได้ แต่ไม่สามารถใช้ใน IE ได้
(2) วิธีแก้ปัญหา
เมื่อประกาศตัวแปร ให้เพิ่ม var เสมอเพื่อหลีกเลี่ยงความคลุมเครือ เพื่อให้สามารถทำงานได้ตามปกติใน IE
นอกจากนี้ เป็นการดีที่สุดที่จะไม่ใช้ชื่อตัวแปรเดียวกันกับรหัสวัตถุ HTML เพื่อลดข้อผิดพลาด
(3) อื่น ๆ
ดูคำถามที่ 4
7 ปัญหา Event.x และ event.y
(1) ปัญหาที่มีอยู่
ใน IE วัตถุเหตุการณ์มีแอตทริบิวต์ x, y แต่ไม่ใช่ใน MF
(2) วิธีแก้ปัญหา
ใน MF ค่าที่เทียบเท่ากับ event.x คือ event.pageX แต่ event.pageX ไม่สามารถใช้งานได้ใน IE
ดังนั้นจึงใช้ event.clientX แทน event.x ตัวแปรนี้มีอยู่ใน IE ด้วย
มีความแตกต่างเล็กน้อยระหว่าง event.clientX และ event.pageX (เมื่อทั้งหน้ามีแถบเลื่อน) แต่ส่วนใหญ่จะเทียบเท่ากัน
หากคุณต้องการให้เหมือนกันทุกประการ คุณสามารถประสบปัญหาเพิ่มเติมได้อีกเล็กน้อย:
mX = event.x ? event.x : event.pageX;
จากนั้นใช้ mX แทน event.x
(3) อื่น ๆ
event.layerX มีอยู่ทั้งใน IE และ MF ความหมายเฉพาะจะแตกต่างกันหรือไม่ยังไม่ได้รับการทดสอบ
8. เกี่ยวกับเฟรม
(1) ปัญหาที่มีอยู่
ใน IE คุณสามารถใช้ window.testFrame เพื่อรับเฟรมได้ แต่ไม่ใช่ใน mf
(2) วิธีแก้ปัญหา
ข้อแตกต่างที่สำคัญระหว่าง mf และ ie ในการใช้ frame คือ:
หากแอตทริบิวต์ต่อไปนี้ถูกเขียนลงในแท็กเฟรม:
<frame src="xx.htm" id="frameId" name="frameName" />
จากนั้นคือสามารถเข้าถึงวัตถุหน้าต่างที่สอดคล้องกับเฟรมนี้ผ่าน id หรือชื่อ ในขณะที่ mf สามารถเข้าถึงวัตถุหน้าต่างที่สอดคล้องกับเฟรมนี้ผ่านชื่อเท่านั้น ตัวอย่างเช่น หากแท็กเฟรมด้านบนเขียนด้วย htm ภายในหน้าต่างด้านบน ดังนั้น สามารถเข้าถึงได้เช่นนี้
เช่น: window.top.frameId หรือ window.top.frameName เพื่อเข้าถึงวัตถุหน้าต่างนี้
mf: วัตถุหน้าต่างนี้สามารถเข้าถึงได้ผ่าน window.top.frameName เท่านั้น
นอกจากนี้ window.top.document.getElementById("frameId") ยังสามารถใช้ได้ทั้งใน mf และ ie เพื่อเข้าถึง frame tag และ window.top.document . getElementById("testFrame").src = 'xx.htm' เพื่อสลับเนื้อหาของเฟรม คุณยังสามารถใช้ window.top.frameName.location = 'xx.htm' เพื่อสลับเนื้อหาของเฟรม คำอธิบายของเฟรมและหน้าต่าง ดูบทความ 'window and frame' ของ bbs และการทดสอบภายใต้ไดเร็กทอรี /test/js/test_frame/
----adun 2004.12.09 การแก้ไข
9. ใน mf คุณสมบัติที่กำหนดโดยตัวคุณเองจะต้องได้รับจาก getAttribute()
10. ไม่มี parentElement parement.children ใน MF มีแต่ใช้
parentNode parentNode.childNodes
ความหมายของตัวห้อยของ childNodes จะแตกต่างกันใน IE และ MF MF ใช้ข้อกำหนด DOM และโหนดข้อความว่างจะถูกแทรกลงใน childNodes
โดยทั่วไป คุณสามารถหลีกเลี่ยงปัญหานี้ได้ผ่านทาง node.getElementsByTagName()
เมื่อโหนดหายไปใน html, IE และ MF จะตีความ parentNode แตกต่างกัน เป็นต้น
<แบบฟอร์ม>
<ตาราง>
<อินพุต/>
</ตาราง>
</แบบฟอร์ม>
ค่าของ input.parentNode ใน MF คือรูปแบบ ในขณะที่ค่าของ input.parentNode ใน IE เป็นโหนดว่าง
ไม่มีเมธอด RemoveNode สำหรับโหนดใน MF คุณต้องใช้เมธอดต่อไปนี้ node.parentNode.removeChild(node
) .const ปัญหา
(1) ปัญหาที่มีอยู่:
ไม่สามารถใช้คีย์เวิร์ด const ใน IE เช่น const constVar = 32; นี่เป็นข้อผิดพลาดทางไวยากรณ์ใน IE
(2) วิธีแก้ปัญหา:
อย่าใช้ const ให้ใช้ var แทน
12.วัตถุในร่างกาย
เนื้อความของ MF มีอยู่ก่อนที่เบราว์เซอร์จะอ่านแท็ก body อย่างสมบูรณ์ ในขณะที่ IE จะต้องมีอยู่หลังจากที่อ่านเนื้อความแล้ว
13. การเข้ารหัส URL
ใน js หากคุณเขียน url ให้เขียนว่า "don't write" ตัวอย่างเช่น var url = 'xx.jsp?objectName=xx&objectEvent=xxx';
frm.action = url จึงมีความเป็นไปได้มากที่ url จะไม่แสดงตามปกติและพารามิเตอร์ไม่ได้รับการส่งไปยังเซิร์ฟเวอร์อย่างถูกต้อง โดยทั่วไปเซิร์ฟเวอร์จะรายงานข้อผิดพลาดว่าไม่พบพารามิเตอร์นั้นแน่นอนว่าเป็นข้อยกเว้น คือถ้ามันอยู่ใน tpl เพราะ tpl สอดคล้องกับข้อกำหนด xml และข้อกำหนด & เขียนเป็น &
โดยทั่วไปแล้ว MF ไม่สามารถจดจำ & ใน js ได้
14. ปัญหา nodeName และ tagName
(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 ได้ (ไม่ทราบว่ามีองค์ประกอบอื่นๆ ที่ไม่สามารถรับได้หรือไม่)