Netscape는 Mozilla 브라우저를 처음 개발했을 때 현명하게도 W3C 표준을 지원하기로 결정했습니다. 따라서 Mozilla는 Netscape Navigator 4.x 및 Microsoft Internet Explorer 레거시 코드와 완전히 역호환되지 않습니다. 예를 들어 나중에 언급한 것처럼 Mozilla는 <span style="font-family:NSimsun"></span>
을 지원하지 않습니다. Internet Explorer 4 W3C 표준 개념이 존재하기 전에 구축된 이 브라우저는 많은 특징을 물려받았습니다. 이 기사에서는 Internet Explorer 및 기타 레거시 브라우저에 대한 강력한 HTML 이전 버전과의 호환성 기능을 제공하는 Mozilla의 특수 모드에 대해 설명합니다.
당시 W3C에는 해당 표준이 없기 때문에 XMLHttpRequest 및 서식 있는 텍스트 편집과 같은 Mozilla가 지원하는 비표준 기술에 대해서도 논의하겠습니다. 여기에는
- 캐스케이딩 스타일 시트(CSS):
- 문서 객체 모델(DOM):
- Math Markup 언어:
- 확장 가능 마크업 언어(XML):
- :
- XML 경로 언어: RDF
- SOAP 1.1
- ECMA
- 일반적인 크로스 브라우저 코딩 팁
웹 표준이 존재하더라도 서로 다른 브라우저는 정확히 동일하게 동작하지 않습니다(사실 동일한 브라우저라도 서로 다른 플랫폼에서의 동작도 다릅니다). Internet Explorer와 같은 많은 브라우저는 W3C 호환 브라우저에서 널리 지원되지 않은 W3C 이전 API를 여전히 지원합니다. Mozilla와 Internet Explorer의 차이점을 살펴보기 전에 먼저 향후 새 브라우저에 대한 지원을 추가할 수 있도록 웹 애플리케이션을 확장 가능하게 만드는 몇 가지 기본 방법을 살펴보겠습니다.
<span style="max-width:90%">if() else가 많이 표시되는 경우가 많습니다()<p></p></span>
다른 브라우저를 다르게 처리하려면 차단하세요. 다음 코드 블록은 Internet Explorer용입니다.
<span style="font-family:NSimsun">if() else()</span>
. . . var elm; if (ns4) elm = document.layers["myID"]; else if (ie4) elm = document.all["myID"]; |
새 브라우저에서 코딩을 방지하는 가장 쉬운 방법은 기능을 추상화하는 것입니다. 중첩된 <span style="font-family:NSimsun">if() else()<br></span>
블록을 사용하지 마세요. 일반적인 작업을 별도의 함수로 추상화하면 효율성이 향상될 수 있습니다. 이렇게 하면 코드를 더 쉽게 읽을 수 있을 뿐만 아니라 새 클라이언트 지원을 추가하기도 더 쉬워집니다.
上述代码仍然存在浏览器嗅探 或者检测用户使用何种浏览器的问题。浏览器嗅探一般通过用户代理完成,比如:
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5) Gecko/20031016 |
虽然使用用户代理来嗅探浏览器提供了所用浏览器的详细信息,但是出现新的浏览器版本时处理用户代理的代码可能出错,因而需要修改代码。
如果浏览器的类型无关紧要(假设禁止不支持的浏览器访问 Web 应用程序),最好通过浏览器本身的能力来嗅探。一般可以通过测试需要的 JavaScript 功能来完成。比如,与其使用:
if (isMozilla || isIE5) |
不如用:
if (document.getElementById) |
这样不用任何修改,在其他支持该方法的浏览器如 Opera 或 Safari 上也能工作。
但是如果准确性很重要,比如要验证浏览器是否满足 Web 应用程序的版本要求或者尝试避免某个 bug,则必须使用用户代理嗅探。
JavaScript 还允许使用内嵌条件语句,有助于提高代码的可读性:
var foo = (condition) ? conditionIsTrue : conditionIsFalse; |
比如,要检索一个元素,可以用如下代码:
function getElement(aID){ return (document.getElementById) ? document.getElementById(aID) : document.all[aID]; } |
![]() ![]() |
![]() 回页首 |
Mozilla 和 Internet Explorer 的区别
首先讨论 Mozilla 和 Internet Explorer 在 HTML 行为方式上的区别。
工具提示
遗留浏览器在 HTML 中引入了工具提示,在链接上显示 <span style="font-family:NSimsun">alt</span>
属性作为工具提示的内容。最新的 W3C HTML 规范增加了 <span style="font-family:NSimsun">title</span>
属性,用于包含链接的详细说明。现代浏览器应该使用 <span style="font-family:NSimsun">title</span>
属性显示工具提示,Mozilla 仅支持用该属性显示工具提示而不能用 <span style="font-family:NSimsun">alt</span>
属性。
实体
HTML 标记可以包含多种实体,W3 标准体 专门作了规定。可以通过数字或者字符引用来引用这些实体。比如,可以用 #160 或者等价的字符引用 <span style="font-family:NSimsun"> </span>
来引用空白字符 <span style="font-family:NSimsun"> </span>
。
一些旧式浏览器,如 Internet Explorer,有一些怪异的地方,比如允许用正常文本内容替换实体后面的分号(<span style="font-family:NSimsun">;</span>
):
  Foo    Foo |
Mozilla 将把上面的 <span style="font-family:NSimsun"> </span>
呈现为空格,虽然违反了 W3C 规范。如果后面紧跟着更多字符,浏览器就不能解析 <span style="font-family:NSimsun"> </span>
,如:
 12345 |
这样的代码在 Mozilla 中无效,因为违反了 W3 标准。为了避免浏览器的差异,应坚持使用正确的形式(<span style="font-family:NSimsun"> </span>
)。
![]() ![]() |
![]() 回页首 |
DOM 차이점
DOM(문서 객체 모델)은 문서 요소를 포함하는 트리형 구조입니다. 이는 W3C의 표준이 있는 JavaScript API를 통해 조작할 수 있습니다. 그러나 W3C 표준화 이전에는 Netscape 4와 Internet Explorer 4에서도 비슷한 방식으로 이 API를 구현했습니다. Mozilla는 W3C 표준에서 지원하지 않는 레거시 API만 구현합니다.
요소 액세스
요소 참조는 브라우저 간 방식으로 검색되지 않으며 document.getElementById(aID)<span style="font-family:NSimsun">document.getElementById(aID)</span>
를 사용하면 이 메서드는 Internet Explorer 5.5, Mozilla에서 사용할 수 있으며 DOM 수준의 일부입니다. 1개 사양.
Mozilla는 <span style="font-family:NSimsun">document.elementName<code><span style="font-family:NSimsun">document.elementName</span>
또는 요소 이름을 통한 요소 액세스를 지원하지 않지만 Internet Explorer는 메서드( 글로벌 네임스페이스 오염이라고도 함). Mozilla는 Netscape 4의 <span style="font-family:NSimsun">document.layers<code><span style="font-family:NSimsun">document.layers</span>
메서드와 Internet Explorer의 <span style="font-family:NSimsun ">document.all<code><span style="font-family:NSimsun">document.all</span>
메소드. 요소를 검색하기 위한 <span style="font-family:NSimsun">document.getElementById<code><span style="font-family:NSimsun">document.getElementById</span>
외에도 <span style="font-family:NSimsun">document.layers <code><span style="font-family:NSimsun">document.layers</span>
및 <span style="font-family:NSimsun">document.all<code><span style="font-family:NSimsun">document.all</span>
은 특정 태그 이름을 가진 모든 문서 요소 목록을 가져옵니다. code><span style="font-family:NSimsun"></span>
<code><br>
요소.
W3C DOM 레벨 1 <span style="font-family:NSimsun">getElementsByTagName()<code><span style="font-family:NSimsun">getElementsByTagName()</span>
메소드를 사용하여 동일한 태그 이름 인용. 이 메소드는 <span style="font-family:NSimsun">document<code><span style="font-family:NSimsun">document</span>
요소에 사용할 수 있는 JavaScript 배열을 반환하며, 다른 노드에서도 사용할 수 있습니다. 해당 하위 트리. DOM 트리의 모든 요소 목록을 얻으려면 <span style="font-family:NSimsun">getElementsByTagName(*)<code><span style="font-family:NSimsun">getElementsByTagName(*)</span>
을 사용하세요.
DOM 레벨 1 메소드는 표 1에 나열되어 있으며, 대부분은 요소를 특정 위치로 이동하거나 가시성(메뉴, 애니메이션)을 전환하는 데 사용됩니다. Netscape 4는
태그(Mozilla에서는 지원되지 않음)를 임의로 위치 지정 가능한 HTML 요소로 사용합니다. Mozilla에서는 <span style="font-family:NSimsun"></span>
<span style="font-family:NSimsun"></span>
<code><br>
태그 위치를 사용하세요. 요소는 Internet Explorer에서도 사용되며 HTML 사양에 포함되어 있습니다.
표 1. 요소에 액세스하는 데 사용되는 메서드
|
설명 | ||||||
document.getElementById( aId ) | 지정된 요소를 반환합니다. ID 요소에 대한 참조입니다. | ||||||
document.getElementsByTagName( aTagName ) | 문서에서 지정된 이름을 가진 요소의 배열을 반환합니다. |
遍历 DOM
Mozilla 通过 JavaScript 支持遍历 DOM 树的 W3C DOM API(如表 2 所示)。文档中每个节点都可使用这些 API 方法,可以在任何方向上遍历树。Internet Explorer 也支持这些 API,还支持原来用于遍历 DOM 树的 API,比如 <span style="font-family:NSimsun">children</span>
属性。
表 2. 用于遍历 DOM 的方法
属性/方法 | 说明 |
childNodes | 返回元素所有子节点的数组。 |
firstChild | 返回元素的第一个子节点。 |
getAttribute( aAttributeName ) | 返回指定属性的值。 |
hasAttribute( aAttributeName ) | 返回一个 Boolean 值表明当前节点是否包含指定名称的属性。 |
hasChildNodes() | 返回一个布尔指表明当前节点是否有子节点。 |
lastChild | 返回元素的最后一个子节点。 |
nextSibling | 返回紧接于当前节点之后的节点。 |
nodeName | 用字符串返回当前节点的名称。 |
nodeType | 返回当前节点的类型。 值说明1元素节点2属性节点3文本节点4CDATA 选择节点5实体引用节点6实体节点7处理指令节点8注释节点9文档节点10文档类型节点11文档片断节点12符号节点 |
nodeValue | 返回当前节点的值。对于包含文本的节点,如文本和注释节点返回其字符串值。对于属性节点返回属性值。其他节点返回 <span style="font-family:NSimsun">null</span> 。 |
ownerDocument | 返回包含当前节点的 <span style="font-family:NSimsun">document</span> 对象。 |
parentNode | 返回当前节点的父节点。 |
previousSibling | 返回当前节点之前的相邻节点。 |
removeAttribute( aName ) | 从当前节点中删除指定的属性。 |
setAttribute( aName, aValue ) | 设置指定属性的值。 |
Internet Explorer 有一种非标准的特殊行为,这些 API 很多跳过(比如)新行字符生成的空白文本节点。Mozilla 则不跳过,因此有时候需要区分这些节点。每个节点都有一个 <span style="font-family:NSimsun">nodeType</span>
属性指定了节点类型。比如,元素节点类型是 1,文本节点是 3,而注释节点是 8。仅处理元素节点最好的办法是遍历所有子节点,然后处理那些 nodeType 为 1 的节点:
HTML:Test cJavaScript: var myDiv = document.getElementById("foo"); var myChildren = myXMLDoc.childNodes; for (var i = 0; i < myChildren.length; i++) { if (myChildren[i].nodeType == 1){ // element node } } |
콘텐츠 생성 및 조작
Mozilla는 <span style="font-family:NSimsun">document.write<code><span style="font-family:NSimsun">document.write</span>
, <span style="font-family:NSimsun">document.open과 같은 DOM 레거시 메서드 <code><span style="font-family:NSimsun">document.open</span>
및 <span style="font-family:NSimsun">document.close<code><span style="font-family:NSimsun">document.close</span>
. Mozilla는 기본적으로 모든 노드에서 작동하는 Internet Explorer의 <span style="font-family:NSimsun">InnerHTML<code><span style="font-family:NSimsun">InnerHTML</span>
메서드도 지원합니다. 그러나 <span style="font-family:NSimsun">OuterHTML<code><span style="font-family:NSimsun">OuterHTML</span>
(요소 주위에 태그를 추가하고 표준에는 이에 상응하는 방법이 없음) 및 <span style="은">innerText<code><span style="font-family:NSimsun">innerText</span>
(노드의 텍스트 값을 설정합니다. Mozilla에서는 <span style="font-family:NSimsun">textContent</span>
). <span style="font-family:NSimsun">textContent</span>
<span style="font- family:NSimsun ">getAdjacentElement<p></p></span>
및 <span style="font-family:NSimsun">insertAdjacentHTML<code><span style="font-family:NSimsun">getAdjacentElement</span>
. 표 3은 모든 DOM 노드에 적용되는 콘텐츠를 조작하기 위한 W3C 표준과 Mozilla 방법을 보여줍니다. <span style="font-family:NSimsun">insertAdjacentHTML</span>
표 3. 콘텐츠 조작을 위한 Mozilla 방법
방법
|
설명 |
||||||||||||||||
appendChild( aNode ) | 새 하위 노드를 생성합니다. 새로 생성된 하위 노드에 대한 참조를 반환합니다. | ||||||||||||||||
cloneNode( aDeep ) | 호출 노드의 복사본을 생성하고 반환합니다. aDeep이 true이면 노드의 전체 하위 트리가 복사됩니다. | ||||||||||||||||
createElement( aTagName ) | aTagName으로 지정된 유형의 부모 없는 DOM 노드를 생성하고 반환합니다. | ||||||||||||||||
createTextNode( aTextValue ) | aTextValue로 지정된 값을 사용하여 새로운 부모 없는 DOM 텍스트 노드를 생성하고 반환합니다. | ||||||||||||||||
insertBefore( aNewNode, aChildNode ) | aChildNode 앞에 NewNode를 삽입합니다. 전자는 현재 노드의 하위 노드여야 합니다. | ||||||||||||||||
removeChild( aChildNode ) | aChildNode를 제거하고 이에 대한 참조를 반환합니다. | ||||||||||||||||
replaceChild( aNewNode, aChildNode ) | aChildNode를 aNewNode로 바꾸고 삭제된 노드에 대한 참조를 반환합니다. |
문서 조각
<span style="font-family:NSimsun">getElementById</span>
<span style="font-family:NSimsun">appendChild</span>
성능상의 이유로 기존 문서의 DOM을 처리하는 대신 메모리에 문서를 생성하는 것이 가능합니다. DOM 레벨 1 Core는 일반 문서 인터페이스의 하위 집합을 포함하는 경량 문서인 문서 조각을 도입합니다. 예를 들어 <span style="font-family:NSimsun">getElementById</span>
<span style="font-family:NSimsun">appendChild</span>
. 기존 문서에 문서 조각을 쉽게 추가할 수 있습니다. <span style="font-family:NSimsun">document.createDocumentFragment()</span>
Mozilla는 <span style="font-family:NSimsun">document.createDocumentFragment()</span>
![]() ![]() |
![]()
![]() |
![]() |
JavaScript 差异
Mozilla 和 Internet Explorer 的多数差异都和 JavaScript 有关。但问题通常源自浏览器向 JavaScript 公开的 API,比如 DOM 钩子。两种浏览器在核心 JavaScript 上区别不大,遇到的问题通常和时间有关。
JavaScript date 差异
<span style="font-family:NSimsun">Date</span>
惟一的区别是 <span style="font-family:NSimsun">getYear</span>
方法。根据 ECMAScript 规范(这是 JavaScript 所遵循的规范),该方法没有解决千年问题,在 2004 年运行 <span style="font-family:NSimsun">new Date().getYear()</span>
将返回“104”。根据 ECMAScript 规范,<span style="font-family:NSimsun">getYear</span>
返回的年份减去 1900 最初是为了在 1998 年返回“98”。ECMAScript Version 3 废止了 <span style="font-family:NSimsun">getYear</span>
,用 <span style="font-family:NSimsun">getFullYear()</span>
代替。Internet Explorer 修改了 <span style="font-family:NSimsun">getYear()</span>
使其和 <span style="font-family:NSimsun">getFullYear()</span>
类似,消除了千年问题,而 Mozilla 坚持采用标准的行为方式。
JavaScript 执行差异
不同的浏览器执行 JavaScript 的方式是不同的。比如,下列代码假设 <span style="font-family:NSimsun">script</span>
块执行的时候 <span style="font-family:NSimsun">p</span>
节点已经存在于 DOM 中:
...Loading... |

JavaScript는 브라우저 및 Node.js 환경에서 실행되며 JavaScript 엔진을 사용하여 코드를 구문 분석하고 실행합니다. 1) 구문 분석 단계에서 초록 구문 트리 (AST)를 생성합니다. 2) 컴파일 단계에서 AST를 바이트 코드 또는 기계 코드로 변환합니다. 3) 실행 단계에서 컴파일 된 코드를 실행하십시오.

Python 및 JavaScript의 미래 추세에는 다음이 포함됩니다. 1. Python은 과학 컴퓨팅 분야에서의 위치를 통합하고 AI, 2. JavaScript는 웹 기술의 개발을 촉진하고, 3. 교차 플랫폼 개발이 핫한 주제가되고 4. 성능 최적화가 중점을 둘 것입니다. 둘 다 해당 분야에서 응용 프로그램 시나리오를 계속 확장하고 성능이 더 많은 혁신을 일으킬 것입니다.

개발 환경에서 Python과 JavaScript의 선택이 모두 중요합니다. 1) Python의 개발 환경에는 Pycharm, Jupyternotebook 및 Anaconda가 포함되어 있으며 데이터 과학 및 빠른 프로토 타이핑에 적합합니다. 2) JavaScript의 개발 환경에는 Node.js, VScode 및 Webpack이 포함되어 있으며 프론트 엔드 및 백엔드 개발에 적합합니다. 프로젝트 요구에 따라 올바른 도구를 선택하면 개발 효율성과 프로젝트 성공률이 향상 될 수 있습니다.

예, JavaScript의 엔진 코어는 C로 작성되었습니다. 1) C 언어는 효율적인 성능과 기본 제어를 제공하며, 이는 JavaScript 엔진 개발에 적합합니다. 2) V8 엔진을 예를 들어, 핵심은 C로 작성되며 C의 효율성 및 객체 지향적 특성을 결합하여 C로 작성됩니다.

JavaScript는 웹 페이지의 상호 작용과 역학을 향상시키기 때문에 현대 웹 사이트의 핵심입니다. 1) 페이지를 새로 고치지 않고 콘텐츠를 변경할 수 있습니다. 2) Domapi를 통해 웹 페이지 조작, 3) 애니메이션 및 드래그 앤 드롭과 같은 복잡한 대화식 효과를 지원합니다. 4) 성능 및 모범 사례를 최적화하여 사용자 경험을 향상시킵니다.

C 및 JavaScript는 WebAssembly를 통한 상호 운용성을 달성합니다. 1) C 코드는 WebAssembly 모듈로 컴파일되어 컴퓨팅 전력을 향상시키기 위해 JavaScript 환경에 도입됩니다. 2) 게임 개발에서 C는 물리 엔진 및 그래픽 렌더링을 처리하며 JavaScript는 게임 로직 및 사용자 인터페이스를 담당합니다.

JavaScript는 웹 사이트, 모바일 응용 프로그램, 데스크탑 응용 프로그램 및 서버 측 프로그래밍에서 널리 사용됩니다. 1) 웹 사이트 개발에서 JavaScript는 HTML 및 CSS와 함께 DOM을 운영하여 동적 효과를 달성하고 jQuery 및 React와 같은 프레임 워크를 지원합니다. 2) 반응 및 이온 성을 통해 JavaScript는 크로스 플랫폼 모바일 애플리케이션을 개발하는 데 사용됩니다. 3) 전자 프레임 워크를 사용하면 JavaScript가 데스크탑 애플리케이션을 구축 할 수 있습니다. 4) node.js는 JavaScript가 서버 측에서 실행되도록하고 동시 요청이 높은 높은 요청을 지원합니다.

Python은 데이터 과학 및 자동화에 더 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 더 적합합니다. 1. Python은 데이터 처리 및 모델링을 위해 Numpy 및 Pandas와 같은 라이브러리를 사용하여 데이터 과학 및 기계 학습에서 잘 수행됩니다. 2. 파이썬은 간결하고 자동화 및 스크립팅이 효율적입니다. 3. JavaScript는 프론트 엔드 개발에 없어서는 안될 것이며 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축하는 데 사용됩니다. 4. JavaScript는 Node.js를 통해 백엔드 개발에 역할을하며 전체 스택 개발을 지원합니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

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

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

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

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

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전
