अब तक पोस्ट किए गए सभी उत्तर सही समाधान दे रहे हैं, हालांकि कोई भी जवाब ठोस समस्या के अंतर्निहित कारण को ठीक से समझाने में सक्षम नहीं था।
फेसलेट एक XML आधारित दृश्य तकनीक है जो HTML आउटपुट उत्पन्न करने के लिए XHTML + XML का उपयोग करता है। XML के पाँच विशेष वर्ण हैं जिनका XML पार्सर द्वारा विशेष उपचार है:
<
एक टैग की शुरुआत।
>
एक टैग का अंत।
"
किसी विशेषता मान का प्रारंभ और अंत।
'
विशेषता मान का वैकल्पिक प्रारंभ और अंत।
&
एक इकाई की शुरुआत (जो समाप्त होती है ;
)।
मामले में की &
है जिसके द्वारा पालन नहीं किया जाता है #
(उदाहरण के लिए  
,  
, आदि), XML पार्सर परोक्ष पाँच में से एक की तलाश में है पूर्वनिर्धारित इकाई नाम lt
, gt
, amp
, quot
और apos
, या किसी भी मैन्युअल रूप से निर्धारित इकाई नाम । हालाँकि, आपके किसी विशेष मामले में, आप &
XML ऑपरेटर के रूप में नहीं, बल्कि जावास्क्रिप्ट ऑपरेटर के रूप में उपयोग कर रहे थे । यह पूरी तरह से एक्सएमएल पार्सिंग त्रुटि के बारे में बताता है:
इकाई नाम को तुरंत इकाई संदर्भ में 'और' का पालन करना चाहिए
संक्षेप में, आप जावास्क्रिप्ट कोड गलत जगह पर लिख रहे हैं, एक जेएस फाइल के बजाय एक एक्सएमएल दस्तावेज़, इसलिए आपको तदनुसार सभी एक्सएमएल विशेष पात्रों से बचना चाहिए। के &
रूप में बच जाना चाहिए &
।
तो, आपके विशेष मामले में,
if (Modernizr.canvas && Modernizr.localstorage &&
बनना चाहिए
if (Modernizr.canvas && Modernizr.localstorage &&
इसे XML- मान्य बनाने के लिए।
हालांकि, यह जावास्क्रिप्ट कोड को पढ़ने और बनाए रखने के लिए कठिन बनाता है। जैसा कि मोज़िला डेवलपर नेटवर्क के उत्कृष्ट दस्तावेज राइटिंग जावास्क्रिप्ट फॉर एक्सएचटीएमएल में कहा गया है , आपको जावास्क्रिप्ट कोड एक चरित्र डेटा (सीडीएटीए) ब्लॉक में रखना चाहिए। इस प्रकार, JSF शर्तों में, यह होगा:
<h:outputScript>
<![CDATA[
// ...
]]>
</h:outputScript>
एक्सएमएल पार्सर ब्लॉक की सामग्री को "सादे वेनिला" चरित्र डेटा के रूप में और एक्सएमएल के रूप में व्याख्या नहीं करेगा और इसलिए एक्सएमएल विशेष वर्ण "जैसा है" की व्याख्या करेगा।
लेकिन, बहुत बेहतर है कि जेएस कोड को अपनी जेएस फाइल में ही डालें, जिसे आप <script src>
या जेएसएफ शब्दों में शामिल करते हैं <h:outputScript>
।
<h:outputScript name="onload.js" target="body" />
( target="body"
इस तरह से नोट करें ; जेएसएफ स्वतः ही जहां कहीं भी स्थित है, उसके <script>
अंतिम छोर पर स्वचालित रूप से रेंडर करेगा , जिससे उसके साथ और उसी तरह का प्रभाव प्राप्त होगा ; इसलिए आपको अब उस स्क्रिप्ट का उपयोग करने की आवश्यकता नहीं है)<body>
<h:outputScript>
window.onload
$(document).ready()
इस तरह से आपको अपने JS कोड में XML-विशेष वर्णों के बारे में चिंता करने की आवश्यकता नहीं है। एक अतिरिक्त बोनस के रूप में, यह आपको ब्राउज़र को जेएस फाइल को कैश करने का अवसर देता है ताकि कुल प्रतिक्रिया का आकार छोटा हो।
यह सभी देखें: