इकाई नाम को तुरंत इकाई संदर्भ में 'और' का पालन करना चाहिए


91

मैं अपने * .xhtml पेज पर पैडमैन गेम रखना चाहता हूं। (मैं jsf 2 और प्राइमफेस 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 && 

मुझे मिला:

इकाई नाम को तुरंत इकाई संदर्भ में 'और' का पालन करना चाहिए।

किसी भी विचार कैसे तय करने के लिए?

जवाबों:


219

अब तक पोस्ट किए गए सभी उत्तर सही समाधान दे रहे हैं, हालांकि कोई भी जवाब ठोस समस्या के अंतर्निहित कारण को ठीक से समझाने में सक्षम नहीं था।

फेसलेट एक XML आधारित दृश्य तकनीक है जो HTML आउटपुट उत्पन्न करने के लिए XHTML + XML का उपयोग करता है। XML के पाँच विशेष वर्ण हैं जिनका XML पार्सर द्वारा विशेष उपचार है:

  • < एक टैग की शुरुआत।
  • > एक टैग का अंत।
  • " किसी विशेषता मान का प्रारंभ और अंत।
  • ' विशेषता मान का वैकल्पिक प्रारंभ और अंत।
  • &एक इकाई की शुरुआत (जो समाप्त होती है ;)।

मामले में की &है जिसके द्वारा पालन नहीं किया जाता है #(उदाहरण के लिए &#160;, &#xA0;, आदि), XML पार्सर परोक्ष पाँच में से एक की तलाश में है पूर्वनिर्धारित इकाई नाम lt , gt, amp, quotऔर apos, या किसी भी मैन्युअल रूप से निर्धारित इकाई नाम । हालाँकि, आपके किसी विशेष मामले में, आप &XML ऑपरेटर के रूप में नहीं, बल्कि जावास्क्रिप्ट ऑपरेटर के रूप में उपयोग कर रहे थे । यह पूरी तरह से एक्सएमएल पार्सिंग त्रुटि के बारे में बताता है:

इकाई नाम को तुरंत इकाई संदर्भ में 'और' का पालन करना चाहिए

संक्षेप में, आप जावास्क्रिप्ट कोड गलत जगह पर लिख रहे हैं, एक जेएस फाइल के बजाय एक एक्सएमएल दस्तावेज़, इसलिए आपको तदनुसार सभी एक्सएमएल विशेष पात्रों से बचना चाहिए। के &रूप में बच जाना चाहिए &amp;

तो, आपके विशेष मामले में,

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

बनना चाहिए

if (Modernizr.canvas &amp;&amp; Modernizr.localstorage &amp;&amp;

इसे 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-विशेष वर्णों के बारे में चिंता करने की आवश्यकता नहीं है। एक अतिरिक्त बोनस के रूप में, यह आपको ब्राउज़र को जेएस फाइल को कैश करने का अवसर देता है ताकि कुल प्रतिक्रिया का आकार छोटा हो।

यह सभी देखें:


नहीं होना चाहिए! [CDATA [एक टिप्पणी लाइन हो? बस उत्सुक।
Nacho321

@ Nacho321: केवल अगर सामग्री प्रकार गलत तरीके से application/xhtml+xmlइसके बजाय सेट किया जाता है text/html, जो बदले में कुछ ब्राउज़रों में कई विफलताओं का कारण होगा, मुख्य रूप से MSIE। "XHTML के लिए लेखन जावास्क्रिप्ट" दस्तावेज़ भी देखें। JSF में, यदि आपको <f:view contentType="text/html">JSF / webbrowser ऑटो-एस्टीमेट काम करने देने के बजाय उपयोग करने की आवश्यकता नहीं है । इसके अलावा आगे देखें stackoverflow.com/tags/xhtml/info
BalusC

नोट: यह केवल Javascipt संचालन के लिए नहीं होता है (क्योंकि मैं &amp;&amp;अपनी त्रुटि के ऊपर एक if-statement एक पंक्ति में सही ढंग से उपयोग करता हूं), लेकिन टिप्पणी लाइन पर भी; मेरी त्रुटि चालू थी // TODO KevinC & Victor: some todo(अब इसे बदल दिया गया है and..)। साथ ही इस पोस्ट के लिए बहुत बहुत धन्यवाद। मैं ओपी के रूप में एक ही समस्या के लिए एक समस्या के रूप में इससे पहले आया था।
केविन क्रूज़सेन

आपका जवाब गलत है। यह होना चाहिए & amp; के बजाय & amp; & amp;
फंकी-एनडी

1
@ funky-nd: मुझे लगता है कि आपने इसे & amp; amp; अब मन में इस के साथ जवाब फिर से पढ़ें।
बालुसक

14

आपको स्क्रिप्ट टैग के अंदर एक CDATA टैग जोड़ने की आवश्यकता है, जब तक कि आप मैन्युअल रूप से नहीं जाना चाहते हैं और सभी XHTML वर्णों से बच सकते हैं (जैसे &बनने की आवश्यकता होगी &amp;)। उदाहरण के लिए:

<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>

12

पार्सर कुछ HTML सामग्री की अपेक्षा कर रहा है, इसलिए यह &एक इकाई की शुरुआत के रूप में देखता है , जैसे &egrave;

इस समाधान का उपयोग करें:

<script type="text/javascript">
// <![CDATA[
Javascript code here
// ]]>
</script>

इसलिए आप यह निर्दिष्ट करते हैं कि कोड HTML पाठ नहीं है, लेकिन केवल उसी के रूप में उपयोग किए जाने वाला डेटा है।



2

यदि आप किसी कारण से XHTML का उपयोग करते हैं, तो ध्यान दें कि XHTML 1.0 C 4 कहता है: "बाहरी स्क्रिप्ट का उपयोग करें यदि आपकी स्क्रिप्ट <या या]]> या - का उपयोग करती है।" यही है, एक scriptतत्व के अंदर स्क्रिप्ट कोड एम्बेड न करें लेकिन इसे एक अलग जावास्क्रिप्ट फ़ाइल में डालें और इसे देखें <script src="foo.js"></script>


0

यदि ब्लॉगर का कोई व्यक्ति आता है, तो BeautifyVSCode में एक्सटेंशन का उपयोग करते समय मुझे यह समस्या थी । यह प्रयोग नहीं beautifyकरते , यह नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.