JS의 브라우저 호환성 문제
이 글에서는 JS의 모든 브라우저와 호환되는 DOMContentLoaded 이벤트에 대한 관련 정보를 주로 소개합니다. 표준 브라우저에서는 DOMContentLoaded 이벤트를 사용하여 요구 사항을 충족할 수 있습니다. 이벤트 처리 기능을 등록하는 것도 매우 간단합니다. 관심 있는 분들은 함께 배워보세요
JavaScript를 사용하여 dom 요소를 조작할 때 dom 요소를 얻는 코드는 일반적으로 window.onload=function(){}事
件处理函数中,但window.onload事件在某些开始后可能会影响客户体验,因为要等待所有的脚本,css代码和图片等内容加载完毕才会触发此事件,尤其是如果图片量很大的情况下,会严重客户体验。所以很多时候,只需要DOM结构加载完毕即可,jQuery的$(document).ready(function(){})
에 배치되어 이 기능을 구현합니다. 다음은 기본 JavaScript에서 이 기능을 구현하는 방법에 대한 소개입니다.
구현 프로세스 소개:
표준 브라우저에서는 DOMContentLoaded 이벤트를 사용하여 요구 사항을 충족할 수 있으며 이벤트 처리 기능을 등록하는 것도 매우 간단합니다.
코드는 다음과 같습니다.
addEventListener(‘DOMContentLoaded',fn,false)
단, IE8과 IE8 이하 브라우저에서는 DOMContentLoaded 이벤트를 지원하지 않으므로 이 문제를 해결하려면 다른 방법이 필요합니다.
많은 친구들은 document.onreadystatechange 이벤트의 document.readyState 상태가 완료인지 여부를 사용하여 DOM 구조가 로드되었는지 확인하는 데 사용된다고 생각할 수 있습니다. 그러나 테스트 후에 페이지가 사용되는 경우 작업을 완료할 수 없습니다. iframe에서 하위 페이지를 도입하면 문제가 발생합니다.
해결 방법은 다음과 같습니다.
DoScroll 하위 버전의 IE 브라우저에 고유한 메서드입니다. dom 구조가 로드되지 않은 경우 이 메서드를 호출하면 오류가 발생하므로 이를 통해 계속해서 이 메서드를 호출할 수 있습니다. 타이머 기능과 결합하여 판단 기능을 구현합니다. 코드는 다음과 같습니다.
eventQueue = []; isReady = false; isBind = false; function domReady(fn){ if(isReady){ fn.call(window); } else{ eventQueue.push(fn); }; bindReady(); }; function bindReady(){ if(isReady) return; if(isBind) return; isBind=true; if(window.addEventListener){ document.addEventListener('DOMContentLoaded',execFn,false); } else if(window.attachEvent){ doScroll(); }; }; function doScroll(){ try{ document.documentElement.doScroll('left'); } catch(error){ return setTimeout(doScroll,20); }; execFn(); }; function execFn(){ if(!isReady){ isReady=true; for(var index=0;i<eventQueue.length;index++){ eventQueue[index].call(window); }; eventQueue = []; }; }; domReady(function(){ //code }); domReady(function(){ //code });
코드는 모든 브라우저와 호환되는 DOMContentLoaded 효과를 구현합니다.
1. 코드 주석:
(1).eventQueue = [], 실행할 함수 대기열에 대한 빈 배열을 선언합니다.
(2).isReady = false, 변수를 선언하고 초기값을 false로 할당하면 true인 경우 dom이 로드되었음을 의미합니다.
(3).isBind = false, 변수를 선언하고 초기값을 false로 할당하면 true인 경우 시간 처리 함수가 바인딩된다는 의미입니다.
(4).function domReady(fn){}, 이 함수는 fn 함수를 실행하기 전에 dom이 로드될 때까지 기다리는 기능을 구현합니다.
(5).if(isReady){fn.call(window);}, 변수 값이 true이면 함수를 직접 실행합니다.
(6).else{eventQueue.push(fn);}, 실행할 함수를 배열에 추가합니다.
(7).bindReady(), 이 함수는 이벤트 처리 기능 등록을 실현할 수 있습니다.
(8).if(isReady) return, true와 같으면 함수에서 직접 점프합니다. 이때 fn 함수가 실행되었습니다.
(9).if(isBind) return, 이미 등록된 경우 두 번째로 등록할 필요가 없습니다.
(10).isBind=true, 변수 값을 true로 변경합니다.
(11).if(window.addEventListener){document.addEventListener('DOMContentLoaded',execFn,false);}, 표준 브라우저인 경우 addEventListener를 사용하여 이벤트 처리 기능을 등록합니다.
(12).else if(window.attachEvent){doScroll();}, 브라우저가 IE8 이하인 경우 doScroll 메서드를 호출하여 이 효과를 얻습니다.
(13).function doScroll(){}, 이 함수는 타이머 함수를 사용하여 doScroll() 함수를 계속 호출할 수 있습니다. 오류가 보고되면 계속 호출하고, 그렇지 않으면 dom 구조가 로드되므로 관련이 있습니다. 실행 기능.
(14).function execFn(){}, 이 함수는 실행할 함수를 배열에서 꺼낸 후 실행하고 마지막으로 배열을 지울 수 있습니다.
위 내용은 모두를 위해 제가 정리한 내용입니다. 앞으로 모든 사람에게 도움이 되기를 바랍니다.
관련 기사:
WeChat 애플릿에서 슬라이더 사용 방법 component
에서 쿠키의 비밀번호를 기억하는 방법위 내용은 JS의 브라우저 호환성 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











기사는 JavaScript 라이브러리 작성, 게시 및 유지 관리, 계획, 개발, 테스트, 문서 및 홍보 전략에 중점을 둡니다.

이 기사는 브라우저에서 JavaScript 성능을 최적화하기위한 전략에 대해 설명하고 실행 시간을 줄이고 페이지로드 속도에 미치는 영향을 최소화하는 데 중점을 둡니다.

프론트 엔드 개발시 프론트 엔드 열지대 티켓 인쇄를위한 자주 묻는 질문과 솔루션, 티켓 인쇄는 일반적인 요구 사항입니다. 그러나 많은 개발자들이 구현하고 있습니다 ...

이 기사는 브라우저 개발자 도구를 사용하여 효과적인 JavaScript 디버깅, 중단 점 설정, 콘솔 사용 및 성능 분석에 중점을 둡니다.

이 기사는 소스 맵을 사용하여 원래 코드에 다시 매핑하여 미니어링 된 JavaScript를 디버그하는 방법을 설명합니다. 소스 맵 활성화, 브레이크 포인트 설정 및 Chrome Devtools 및 Webpack과 같은 도구 사용에 대해 설명합니다.

이 기사는 Java의 컬렉션 프레임 워크의 효과적인 사용을 탐구합니다. 데이터 구조, 성능 요구 및 스레드 안전을 기반으로 적절한 컬렉션 (목록, 세트, 맵, 큐)을 선택하는 것을 강조합니다. 효율적인 수집 사용을 최적화합니다

엔트리 레벨 타입 스크립트 자습서를 마스터 한 후에는 TypeScript를 지원하고 JavaScript로 컴파일하는 IDE에서 자신의 코드를 작성할 수 있어야합니다. 이 튜토리얼은 TypeScript의 다양한 데이터 유형으로 뛰어납니다. JavaScript에는 NULL, UNDEFINED, BOOLEAN, 번호, 문자열, 기호 (ES6에 의해 소개 됨) 및 객체의 7 가지 데이터 유형이 있습니다. TypeScript는이 기반으로 더 많은 유형을 정의 하며이 튜토리얼은이 모든 튜토리얼을 자세히 다룹니다. 널 데이터 유형 JavaScript와 마찬가지로 Null in TypeScript

이 튜토리얼은 Chart.js를 사용하여 파이, 링 및 버블 차트를 만드는 방법을 설명합니다. 이전에는 차트 유형의 차트 유형을 배웠습니다. JS : 라인 차트 및 막대 차트 (자습서 2)와 레이더 차트 및 극지 지역 차트 (자습서 3)를 배웠습니다. 파이 및 링 차트를 만듭니다 파이 차트와 링 차트는 다른 부분으로 나뉘어 진 전체의 비율을 보여주는 데 이상적입니다. 예를 들어, 파이 차트는 사파리에서 남성 사자, 여성 사자 및 젊은 사자의 비율 또는 선거에서 다른 후보자가받는 투표율을 보여주는 데 사용될 수 있습니다. 파이 차트는 단일 매개 변수 또는 데이터 세트를 비교하는 데만 적합합니다. 파이 차트의 팬 각도는 데이터 포인트의 숫자 크기에 의존하기 때문에 원형 차트는 값이 0 인 엔티티를 그릴 수 없습니다. 이것은 비율이 0 인 모든 엔티티를 의미합니다
