엔티티 이름은 엔티티 참조에서 '&'바로 뒤에 와야합니다.
* .xhtml 페이지에 packman 게임을 넣고 싶습니다. (jsf 2와 primefaces 3.5를 사용하고 있습니다)
하나,
xhtml에서 html 페이지를 "번역"하면이 스크립트에서 오류가 발생합니다.
<script>
var el = document.getElementById("pacman");
if (Modernizr.canvas && Modernizr.localstorage &&
Modernizr.audio && (Modernizr.audio.ogg || Modernizr.audio.mp3)) {
window.setTimeout(function () { PACMAN.init(el, "./"); }, 0);
} else {
el.innerHTML = "Sorry, needs a decent browser<br /><small>" +
"(firefox 3.6+, Chrome 4+, Opera 10+ and Safari 4+)</small>";
}
</script>
줄에서 :
if (Modernizr.canvas && Modernizr.localstorage &&
나는 얻다:
엔티티 이름은 엔티티 참조에서 '&'바로 뒤에 와야합니다.
그것을 고치는 방법을 아십니까?
지금까지 게시 된 모든 답변이 올바른 해결책을 제시하고 있지만 구체적인 문제의 근본 원인을 제대로 설명 할 수있는 답변은 없었습니다.
Facelets는 XHTML + XML을 사용하여 HTML 출력을 생성하는 XML 기반보기 기술입니다. XML에는 XML 파서에 의해 특수 처리되는 5 개의 특수 문자가 있습니다.
<
태그의 시작.>
태그의 끝."
속성 값의 시작과 끝.'
속성 값의 대체 시작 및 끝.&
엔티티의 시작 (로 끝나는;
).
경우의 &
하는 따르지 #
(예를 들면  
,  
등), XML 파서는 암시 적으로 다섯 가지 중 하나를 찾고 미리 정의 된 개체 이름 lt
, gt
, amp
, quot
및 apos
, 또는 수동으로 정의 된 엔티티 이름 . 그러나 특정 경우 &
에는 XML 엔티티가 아닌 JavaScript 연산자 로 사용 했습니다. 이것은 XML 구문 분석 오류를 완전히 설명합니다.
엔티티 이름은 엔티티 참조에서 '&'바로 뒤에 와야합니다.
본질적으로, JS 파일 대신 XML 문서 인 잘못된 위치에 JavaScript 코드를 작성하고 있으므로 이에 따라 모든 XML 특수 문자를 이스케이프해야합니다. &
로 이스케이프해야합니다 &
.
따라서 귀하의 특정 경우에는
if (Modernizr.canvas && Modernizr.localstorage &&
되어야한다
if (Modernizr.canvas && Modernizr.localstorage &&
XML 유효하게 만드십시오.
그러나 이로 인해 JavaScript 코드를 읽고 유지하기가 더 어려워집니다. Mozilla Developer Network의 뛰어난 문서 Writing JavaScript for XHTML 에서 언급했듯이 JavaScript 코드를 문자 데이터 (CDATA) 블록에 배치해야합니다. 따라서 JSF 용어로는 다음과 같습니다.
<h:outputScript>
<![CDATA[
// ...
]]>
</h:outputScript>
XML 파서는 블록의 내용을 XML이 아닌 "일반 바닐라"문자 데이터로 해석하므로 XML 특수 문자를 "있는 그대로"해석합니다.
그러나 훨씬 더 나은 방법은 JS 코드를 자체 JS 파일에 넣는 <script src>
것 <h:outputScript>
입니다.
<h:outputScript name="onload.js" target="body" />
(음 target="body"
,이 방법 JSF가 자동으로 렌더링됩니다 <script>
의 맨 마지막 <body>
에 관계없이 어디 <h:outputScript>
자체가 본인과 같은 효과를 달성, 위치 window.onload
등을 $(document).ready()
, 당신은 그 스크립트에서 더 이상 사람들을 사용할 필요가 없습니다)
이렇게하면 JS 코드에서 XML 특수 문자에 대해 걱정할 필요가 없습니다. 추가 보너스로 브라우저가 JS 파일을 캐시하여 총 응답 크기를 줄일 수 있습니다.
또한보십시오:
- /page.xhtml 구문 분석 오류 : 오류 추적 [line : 42] 엔티티 "nbsp"가 참조되었지만 선언되지 않았습니다.
- HTML 4/5에서 JSF + Facelets를 사용할 수 있습니까?
- How to reference CSS / JS / image resource in Facelets template?
- Writing JavaScript for XHTML
You need to add a CDATA tag inside of the script tag, unless you want to manually go through and escape all XHTML characters (e.g. &
would need to become &
). For example:
<script>
//<![CDATA[
var el = document.getElementById("pacman");
if (Modernizr.canvas && Modernizr.localstorage &&
Modernizr.audio && (Modernizr.audio.ogg || Modernizr.audio.mp3)) {
window.setTimeout(function () { PACMAN.init(el, "./"); }, 0);
} else {
el.innerHTML = "Sorry, needs a decent browser<br /><small>" +
"(firefox 3.6+, Chrome 4+, Opera 10+ and Safari 4+)</small>";
}
//]]>
</script>
The parser is expecting some HTML content, so it sees &
as the beginning of an entity, like è
.
Use this workaround:
<script type="text/javascript">
// <![CDATA[
Javascript code here
// ]]>
</script>
so you specify that the code is not HTML text but just data to be used as is.
Do
<script>//<![CDATA[
/* script */
//]]></script>
If you use XHTML, for some reason, note that XHTML 1.0 C 4 says: “Use external scripts if your script uses < or & or ]]> or --.” That is, don’t embed script code inside a script
element but put it into a separate JavaScript file and refer to it with <script src="foo.js"></script>
.
'programing' 카테고리의 다른 글
Connect 3.0 지원 중단 경고를 제거하는 방법은 무엇입니까? (0) | 2020.10.20 |
---|---|
Intent.ACTION_GET_CONTENT에서 반환 된 URI에서 파일 이름을 추출하는 방법은 무엇입니까? (0) | 2020.10.20 |
SQL 네트워크 인터페이스, 오류 : 50-로컬 데이터베이스 런타임 오류가 발생했습니다. (0) | 2020.10.20 |
PHP에서 대시를 CamelCase로 변환 (0) | 2020.10.20 |
C 프로그래밍에서 대? (0) | 2020.10.20 |