>웹 프론트엔드 >JS 튜토리얼 >Javascript IE 및 Firefox 호환성 편집(zz)_기본 지식

Javascript IE 및 Firefox 호환성 편집(zz)_기본 지식

WBOY
WBOY원래의
2016-05-16 19:19:55950검색

1. document.form.item 문제
(1) 기존 문제:
기존 코드에 document.formName.item("itemName")과 같은 명령문이 많아 MF
에서 실행할 수 없는 명령문이 많이 있습니다( 2) 해결 방법:
대신 document.formName.elements["elementName"]을 사용하세요.
(1) 기존 문제:
IE에 액세스할 때 기존 코드의 많은 컬렉션 개체가 ()를 사용합니다. 하지만 MF는 그럴 수 없어요.
(2) 해결 방법:
아래 첨자 연산으로 []를 대신 사용하세요. 예: document.forms("formName")은 document.forms["formName"]으로 변경됩니다.
또 다른 예: document.getElementsByName("inputName")(1)이 document.getElementsByName("inputName")[1]으로 변경됨
(3) 기타



3 .window.event
(1) 기존 문제:
window.event를 사용하여 MF에서 실행할 수 없습니다.
(2) 해결 방법:
MF의 이벤트는 이벤트가 발생하는 장면에서만 사용할 수 있습니다. 문제는 아직 해결될 수 없습니다. 다음과 같이 수정할 수 있습니다.
원본 코드(IE에서 실행 가능):
새 코드(IE 및 MF에서 실행 가능):
                                                                      호출이 매개변수를 제공하지 않는 경우) 여전히 IE에서 실행되지만 오류는 발생하지 않습니다. 따라서 이 솔루션의 tpl 부분은 여전히 ​​이전 코드와 호환됩니다.



4. HTML 개체의 ID를 개체 이름으로 사용하는 문제
(1) 기존 문제 IE에서는 HTML 개체의 ID가 문서의 하위 개체 변수로 사용됩니다. 이름을 직접 사용합니다. MF에서는 불가능합니다.
(2) 해결 방법
객체 변수로 idName 대신 getElementById("idName")를 사용하세요.



5. idName 문자열을 사용하여 객체를 얻을 때 발생하는 문제
(1) 기존 문제 IE에서는 eval(idName)을 사용하여 id가 포함된 HTML을 가져올 수 있습니다. MF가 아닌 idName 개체입니다.
(2) 해결 방법
eval(idName) 대신 getElementById(idName)를 사용하세요.



6. 변수명이 HTML 객체 id와 같은 문제
(1) 기존 문제
MF에서는 객체 id를 사용하지 않기 때문에 따라서 HTML 개체 ID와 동일한 변수 이름을 사용할 수 있지만 IE에서는 사용할 수 없습니다.
(2) 해결 방법
변수 선언 시 모호함을 피하기 위해 항상 var를 추가해 주어야 IE에서도 정상적으로 실행될 수 있습니다.
또한 오류를 줄이기 위해 HTML 개체 ID와 동일한 변수 이름을 사용하지 않는 것이 가장 좋습니다.
(3) 기타
질문 4 참조



7. event.x 및 event.y 문제
(1) IE의 기존 문제
이벤트 객체에는 MF에 없는 x, y 속성이 있습니다.
(2) 솔루션
MF에서는 event.x에 해당하는 것이 event.pageX입니다. 그러나 IE에는 event.pageX가 존재하지 않습니다.
따라서 event.x 대신 event.clientX가 사용됩니다. 이 변수는 IE에도 존재합니다.
event.clientX와 event.pageX(전체 페이지에 스크롤 막대가 있는 경우) 사이에는 미묘한 차이가 있지만 대부분 동일합니다.



완전히 동일해지려면 조금 더 고생하면 됩니다.
mX = event.x ? event.x : event.pageX
event.x 대신 mX를 사용하세요
(3) 기타
event.layerX는 IE와 MF에서 사용 가능하지만 구체적인 의미에 차이가 있는지는 아직 테스트되지 않았습니다.




8. 프레임 정보
(1) 기존 문제
IE에서는 window.testFrame을 사용할 수 있지만 mf에서는 가져올 수 없습니다.
( 2) 해결 방법
프레임 사용에 있어서 mf와 ie의 주요 차이점은 다음과 같습니다.
프레임 태그에 다음 속성이 기록된 경우:

그러면 ie는 id 또는 Name은
프레임에 해당하는 윈도우 객체에 접근하고, mf는
을 통해서만 이 프레임에 해당하는 윈도우 객체에 접근할 수 있다. 다음과 같이 액세스할 수 있습니다.
예: 이 창 개체에 액세스하려면 window.top.frameId 또는 window.top.frameName을 사용하세요
mf: 이 창 개체에 액세스하려면 window.top.frameName만 사용할 수 있습니다



또한 mf와 ie 모두에서 window.top.document.getElementById("frameId")를 사용하여 프레임 태그
에 액세스하고 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을 획득해야 합니다. mf에는 parentElement parement.children이 없지만
parentNode parentNode.childNodes IE와 MF에서는 childNodes의 첨자의 의미가 다릅니다. MF는 DOM 사양을 사용하며 childNodes 빈 텍스트 노드에 삽입됩니다.
일반적으로 node.getElementsByTagName()을 통해 이 문제를 피할 수 있습니다.
HTML에 노드가 누락된 경우 IE와 MF는 parentNode를 다르게 해석합니다. 예를 들어



        
   


MF의 input.parentNode 값은 form이고, IE의 input.parentNode 값은 빈 노드입니다.



RemoveNode 메소드가 없습니다. MF 노드의 경우 다음 방법을 사용해야 합니다 node.parentNode.removeChild(node)



11.const 문제
(1) 기존 문제:
const 키워드 IE에서는 사용할 수 없습니다. 예를 들어, const constVar = 32; 이는 IE의 구문 오류입니다.
(2) 해결책:
const를 사용하지 말고 var로 바꾸세요.



12. body 객체
MF의 body는 브라우저가 body 태그를 완전히 읽기 전에 존재하고, IE는 body 태그를 완전히 읽은 후에 존재해야 합니다.



13.url 인코딩
js에서 URL을 작성하는 경우에는 작성하지 말고, 예를 들어 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에서는 div를 가져오는 데 getElementsByName() 또는 document.all[name]을 사용할 수 없습니다. 요소(취할 수 없는 다른 요소가 있는지는 알 수 없습니다).
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.