Il nome dell’entity framework deve seguire immediatamente il segno “&” nel riferimento all’ quadro

Voglio mettere un gioco packman sulla mia pagina * .xhtml. (Sto usando jsf 2 e primefaces 3.5)

Però,

quando ho “tradotto” la pagina html in xhtml ottengo un errore in questo 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
" + "(firefox 3.6+, Chrome 4+, Opera 10+ and Safari 4+)"; }

Alla linea:

 if (Modernizr.canvas && Modernizr.localstorage && 

ottengo:

Il nome dell’ quadro deve seguire immediatamente il segno “&” nel riferimento all’ quadro.

Qualche idea su come sistemarlo?

Tutte le risposte pubblicate finora forniscono le giuste soluzioni, tuttavia nessuna risposta è stata in grado di spiegare correttamente la causa alla base del problema concreto.

Facelets è una tecnologia di visualizzazione basata su XML che utilizza XHTML + XML per generare output HTML. XML ha cinque caratteri speciali che hanno un trattamento speciale dal parser XML:

  • < l'inizio di un tag.
  • > la fine di un tag.
  • " l'inizio e la fine di un valore di attributo.
  • ' l'inizio e la fine alternativi di un valore di attributo.
  • & l'inizio di un'entity framework (che termina con ; ).

In caso di & che non è seguito da # (es.     ecc.), Il parser XML cerca implicitamente uno dei cinque nomi di quadro predefiniti lt , gt , amp , quot e apos , o qualsiasi nome di quadro definito manualmente . Tuttavia, nel tuo caso particolare, stavi usando & come operatore JavaScript, non come quadro XML. Questo spiega totalmente l'errore di analisi XML che hai ottenuto:

Il nome dell' quadro deve seguire immediatamente il segno "&" nel riferimento all'entity framework

In sostanza, stai scrivendo il codice JavaScript nel posto sbagliato, un documento XML invece di un file JS, quindi dovresti riuscire a sfuggire tutti i caratteri speciali XML di conseguenza. Il & deve essere scappato come & .

Quindi, nel tuo caso particolare, il

 if (Modernizr.canvas && Modernizr.localstorage && 

deve diventare

 if (Modernizr.canvas && Modernizr.localstorage && 

per renderlo XML-valido.

Tuttavia, questo rende il codice JavaScript più difficile da leggere e mantenere. Come affermato nell'eccellente documento di Mozilla Developer Network Writing JavaScript per XHTML , dovresti inserire il codice JavaScript in un blocco di dati di carattere (CDATA). Pertanto, in termini JSF, ciò sarebbe:

    

Il parser XML interpreterà i contenuti del blocco come dati di carattere "plain vanilla" e non come XML e quindi interpreterà i caratteri speciali XML "as-is".

Ma, molto meglio è mettere semplicemente il codice JS nel proprio file JS che includi , o in termini JSF, .

  

(nota il target="body" : in questo modo JSF renderà automaticamente lo alla fine di , indipendentemente da dove si trova , ottenendo lo stesso effetto di window.onload e $(document).ready() ; quindi non è necessario utilizzarli più in quello script)

In questo modo non devi preoccuparti dei caratteri speciali XML nel tuo codice JS. Come bonus aggiuntivo, questo ti dà l'opportunità di lasciare che il browser memorizzi il file JS nella cache in modo che le dimensioni di risposta totali siano minori.

Guarda anche:

  • Errore di analisi /page.xhtml: Errore tracciato [line: 42] L'entity framework "nbsp" è stata referenziata, ma non dichiarata
  • È ansible utilizzare Facelets JSF + con HTML 4/5?
  • Come fare riferimento a CSS / JS / risorsa immagine nel modello Facelets?
  • Scrivere JavaScript per XHTML

È necessario aggiungere un tag CDATA all’interno del tag dello script, a meno che non si desideri eseguire manualmente il passaggio e sfuggire tutti i caratteri XHTML (ad esempio & sarebbe necessario diventare & ). Per esempio:

  

Il parser si aspetta qualche contenuto HTML, quindi vede & come l’inizio di un’ quadro, come ad esempio .

Utilizza questa soluzione alternativa:

  

quindi specifichi che il codice non è testo HTML ma solo dati da usare così come sono.

Fare

  

Se usi XHTML, per qualche motivo, nota che XHTML 1.0 C 4 dice: “Usa script esterni se lo script usa o -.” Cioè, non incorporare il codice di script all’interno di un elemento di script ma inseriscilo in un file JavaScript separato e riferiscilo con .