2010-02-22 9 views
9

그래서 최근에 Firefox에서 자바 스크립트에 <>...</> 태그를 사용할 수 있다는 것을 발견했습니다. 이는 HTML 또는 CSS 블록을 정의 할 때 편리합니다.자바 스크립트와`<...> ...</>`태그

GM_addStyle(<><![CDATA[ 
    .page { display: block } 
    /* ... */ 
    td { vertical-align: top } 
]]></>); 
//... 
div.innerHTML = <><![CDATA[ 
    <table class="section"> 
    <!-- ... --> 
    </table> 
]]></>; 

하지만 정확히 무슨 일이 일어나고 있는지 잘 모르겠습니다. 사용하고있는 구문을 이해하는 것이 좋습니다. <>...</>은 정확히 무엇을 반환합니까? <![CDATA[...]]>에 내용을 넣었을 때 도주가 잘되는 것을 알아 차 렸습니다. 이 Firefox 만 또는 크로스 브라우저입니까?

나는 이것을 온라인으로 보려고했지만 정상적인 Google/기호 문제가 발생했습니다. 또한 google CDATA javascript의 결과는 대부분 관련성이없는 것으로 보입니다.

+1

+1, 좋은 질문입니다. 브라우저 간 호환성에 대한 가능성을 여기에서 공상하지 마십시오 :-) Firefox 확장 기능에도 좋습니다. –

+0

@Andy E - 자바 스크립트 1.6 표준처럼 보이므로 지원하는 모든 항목에서 작동해야합니다. – rampion

+0

그것은 ECMAScript for XML이라고 불립니다. 나는 이것을 여러 번 읽었음에도 이것을보고 놀랐습니다. 여기에 위키 피 디아 정보가 있습니다 (http://en.wikipedia.org/wiki/ECMAScript_for_XML) –

답변

4

빈 태그는 루트 요소를 작성하는 방법 일 뿐이므로 XML 묶음을 래핑하는 방법이 있다고 생각합니다. 그것은 "이 루트 요소의 자식을 XML로 해석"하고 귀하의 경우에있는 한 명의 자식이 "이 자식을 CDATA 블록으로 해석하십시오"라고 말합니다.

+0

그래서 임의의 XML을 Javascript의 값으로 쓸 수 있습니까? 이상하게 보입니다. – rampion

+0

내가 처음봤을 때 나를 놀라게했다. 그러나 그것이 Flex/Actionscript에서 작동하는 방식이며, 나는 그것이 우연의 일치라고 생각하지 않습니다. 경고 :이 말을 명확하게 말할 수 없기 때문에 "믿는다"고 말했습니다. – Robusto

+1

당신이 옳은 것 같습니다 : [ "E4X는 원시 XML 객체를 JavaScript 언어로 도입하고, 리터럴 XML 문서를 JavaScript 코드에 임베드하기위한 구문을 추가합니다."] (https://developer.mozilla.org/En/E4X/ Processing_XML_with_E4X) – rampion

1

하나의 하위 항목에 XMLList 리터럴 (<>...</>)을 사용할 이유가 없습니다. 어쨌든 하나의 XML 항목으로 처리되기 때문입니다. <![CDATA[...]]>만을 사용하지 않으시겠습니까? 또한 <![CDATA[...]]>은 XML 텍스트 노드 (<![CDATA[]]>.nodeKind() === "text")를 반환합니다.

이 부분은 모두 E4X의 일부로, ActionScript 3 및 두 가지 JavaScript 엔진에서 모두 구현됩니다.

+1

흠 ... 단지''은 FF3.6에서 구문 오류입니다 (오류 콘솔에 연결하기 만하면됩니다). Greasemonkey 스크립트에서 어떻게 평가할지는 모르겠지만 mozilla 문서 (https://developer.mozilla.org/En/E4X/Processing_XML_with_E4X)는 는 보통 태그에서 특별하게 취급되지 않습니다. – rampion

+1

오류 콘솔에서 1.6이 아니라 JavaScript 1.5를 평가하고 있기 때문입니다. greasemonkey 스크립트에서는 인라인 HTML 스크립트가 아니기 때문에 CDATA 문제가 발생하지 않습니다. 스크립트의'type'의 끝에'; e4x = 1'을 추가하십시오. 또는 E4X를 사용할 수있게 해주는이 쉘을 사용하는 것이 더 좋습니다 : http://code.eligrey.com/shell/shell.html –

1

Elijah가 말했듯이, E4X 구문은 모질라가 아닌 다른 곳에서 작동하지 않습니다. 원래 마크 업과 동일한 XML 객체의 암시 적 toString 메소드를 사용하는 것만으로 XML과 관련된 작업을 수행하는 것으로 보이지 않습니다. ECMA-357 (E4X 스펙)은 XML에 대한 정확한 구문 분석 및 직렬화 규칙을 지정하지 않으므로 예를 들어 보증하지 않습니다. 마커를 <![CDATA[ 삭제해야합니다. IMO는 파이어 폭스에서만이 점에 의문을 제기한다.

어쨌든 script 블록 내에서 사용하기 위해 콘텐츠를 이스케이프하는 문제를 해결하지는 못합니다 ... 특히 </ 시퀀스는 HTML4에서 여전히 유효하지 않으며 전체 로트는 XHTML에서 유효하지 않으며 콘텐츠의 </script]]> 시퀀스에 대해 여전히 염려해야합니다. 그래서 정말로 많이 얻지는 못했지만 ... 다른 모든 브라우저에 대한 지원을 희생하면서, 외부 스크립트에서 여러 줄의 문자열을 얻게되었습니다. 나는 그것이 정말로 그것의 가치가 있다고 생각하지 않는다.

관련 문제