[解決済み] エンティティ名は,エンティティ参照の'&'の直後に付けなければならない。
質問事項
パックマンゲームを*.xhtmlのページに載せたいのですが、どうしたらいいですか(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はXMLベースのビュー技術で、XHTML+XMLを使用してHTML出力を生成します。XMLには5つの特殊文字があり、XMLパーサーはこれらの文字を特別に扱います。
-
<
タグの開始点です。 -
>
タグの終端を表します。 -
"
属性値の開始と終了。 -
'
属性値の代替的な開始と終了。 -
&
で終わる)エンティティの開始点。;
).
の場合
&
が続いていない場合
#
(例
 
,
 
など)、XMLパーサーは暗黙のうちに5種類の
定義済みエンティティ名
lt
,
gt
,
amp
,
quot
と
apos
または任意の
手動で定義したエンティティ名
. しかし、あなたの場合は
&
をXMLエンティティとしてではなく、JavaScriptの演算子として使用します。これによって、XMLのパース・エラーが発生したことが完全に説明できます。
エンティティ名の直後には、エンティティ参照の '&' を記述する必要があります。
要するに、あなたはJavaScriptのコードを間違った場所、JSファイルではなくXMLドキュメントに書いているわけですから、それに応じてすべてのXML特殊文字をエスケープする必要があります。そのため
&
としてエスケープする必要があります。
&
.
つまり、あなたの特定のケースでは
if (Modernizr.canvas && Modernizr.localstorage &&
になる必要があります。
if (Modernizr.canvas && Modernizr.localstorage &&
でXML-validになります。
しかし、これではJavaScriptのコードが読みづらく、メンテナンスもしづらくなってしまいます。また
&
の代わりに
&
をXML文書内のJavaScriptコードで使用する場合は、文字データ(CDATA)ブロックにJavaScriptコードを配置する必要があります。したがって、JSFの用語では、それは次のようになります。
<h:outputScript>
<![CDATA[
// ...
]]>
</h:outputScript>
XMLパーサーは、ブロックの内容をXMLとしてではなく、文字データとして解釈するため、XMLの特殊文字をそのまま解釈してしまいます。
しかし、より良い方法は、JSコードを独自のJSファイルに入れ、それを
<script src>
JSFの用語では
<h:outputScript>
.
<h:outputScript name="onload.js" target="body" />
(注
target="body"
このようにすると、JSF は自動的に
<script>
の一番最後にある
<body>
に関係なく
<h:outputScript>
と同じ効果が得られます。
window.onload
と
$(document).ready()
ということで、このスクリプトではもうこれらを使う必要はありません)
こうすることで、JSのコードにXML特有の文字が含まれることを気にする必要がなくなります。さらに、ブラウザにJSファイルをキャッシュさせることができるので、レスポンスの総サイズを小さくすることができます。
こちらもご覧ください。
関連
-
[解決済み】Heroku:ノードアプリで「このアプリにはデフォルトの言語が検出されませんでした」エラーがスローされる
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み】Uncaught ReferenceError: angular is not defined - AngularJSが動作しない。
-
[解決済み】jquery $.ajaxオブジェクトのresponseJSONプロパティを取得する方法 [重複]。
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み】Uncaught SyntaxError: JSON の位置 0 に予期しないトークン u があります。
-
[解決済み】TypeError: res.status は関数ではありません。
-
[解決済み】 Uncaught Reference Error: stLight is not defined (in Chrome only)
-
[解決済み] オブジェクトのプロパティが存在するかどうかを、プロパティ名を持つ変数で確認するには?
-
[解決済み】オブジェクトの型の名前を取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】React Js: Uncaught (in promise) SyntaxError: 位置 0 の JSON で予期しないトークン < が発生しました。
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み】Google Conversionsが動作しない - スクリプトが読み込まれない
-
[解決済み】React、Uncaught ReferenceError。ReactDOMは定義されていません
-
[解決済み】XMLパースエラー:ルート要素が見つからない コンソールの場所 FF
-
[解決済み】FirefoxでGoogle Maps V3をリモートで使用すると「googleが定義されていません」と表示される。
-
[解決済み】Kendo Observable Bindingと併用する場合、Kendo Switch Labelsを変更することは可能ですか?[Kendo-UI]です。
-
[解決済み】 \u003C とは何ですか?
-
[解決済み】react router v^4.0.0 Uncaught TypeError: 未定義のプロパティ'location'を読み取れない
-
[解決済み】XHTMLのパースでエラー。要素の内容は整形された文字データまたはマークアップで構成されていなければならない