সত্তার নাম অবশ্যই অবিলম্বে সত্তা রেফারেন্সে '&' অনুসরণ করবে


91

আমি আমার * .xhtml পৃষ্ঠায় একটি প্যাকম্যান গেমটি রাখতে চাই ((আমি jsf 2 এবং প্রাইমফেসগুলি 3.5 ব্যবহার করছি)

যাহোক,

আমি যখন এইচটিএমএল এইচটিএমএল পৃষ্ঠাকে "অনুবাদ" করেছি তখন এই স্ক্রিপ্টটিতে আমি একটি ত্রুটি পেয়েছি:

    <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

এখনও অবধি পোস্ট করা সমস্ত উত্তর সঠিক সমাধান দিচ্ছে, তবে কোনও উত্তরই কংক্রিট সমস্যার অন্তর্নিহিত কারণটি সঠিকভাবে ব্যাখ্যা করতে সক্ষম হয়নি।

ফেসলেটস হ'ল একটি এক্সএমএল ভিত্তিক ভিউ প্রযুক্তি যা এইচটিএমএল আউটপুট তৈরি করতে এক্সএইচএমএল + এক্সএমএল ব্যবহার করে। এক্সএমএলের পাঁচটি বিশেষ অক্ষর রয়েছে যা এক্সএমএল পার্সারের বিশেষ চিকিত্সা করে:

  • < একটি ট্যাগ শুরু।
  • > একটি ট্যাগ শেষে।
  • " একটি বৈশিষ্ট্য মানের শুরু এবং শেষ।
  • ' একটি বিকল্প বৈশিষ্ট্যের বিকল্প শুরু এবং শেষ।
  • &একটি সত্তার শুরু (যা দিয়ে শেষ হয় ;)।

যদি এর &যার দ্বারা অনুসৃত হয় না #(যেমন &#160;, &#xA0;, ইত্যাদি), এক্সএমএল পার্সার পরোক্ষভাবে পাঁচটি এক জন্য খুঁজছেন হয় পূর্বনির্ধারিত সত্তা নাম lt , gt, amp, quotএবং apos, বা কোনো নিজে সংজ্ঞায়িত সত্তা নাম । তবে, আপনার নির্দিষ্ট ক্ষেত্রে, আপনি &একটি জাভাস্ক্রিপ্ট অপারেটর হিসাবে ব্যবহার করেছেন, এক্সএমএল সত্তা হিসাবে নয়। এটি আপনার পেয়ে যাওয়া XML পার্সিং ত্রুটিটিকে পুরোপুরি ব্যাখ্যা করে:

সত্তার নাম অবশ্যই অবিলম্বে সত্তা রেফারেন্সে '&' অনুসরণ করবে

সংক্ষেপে, আপনি জাভাস্ক্রিপ্ট কোডটি ভুল জায়গায় লিখছেন, জেএস ফাইলের পরিবর্তে একটি এক্সএমএল ডকুমেন্ট, সুতরাং সেই অনুযায়ী আপনার সমস্ত এক্সএমএল বিশেষ অক্ষরগুলি থেকে পালানো উচিত। &যেমন পলান করা আবশ্যক &amp;

সুতরাং, আপনার বিশেষ ক্ষেত্রে,

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

অবশ্যই হয়ে উঠবে

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

এটি এক্সএমএল-বৈধ করতে।

তবে এটি জাভাস্ক্রিপ্ট কোডটি পড়া এবং বজায় রাখা আরও শক্ত করে তোলে। মোজিলা বিকাশকারী নেটওয়ার্কের এক্সএইচটিএমএলের জাভাস্ক্রিপ্ট লেখার দুর্দান্ত নথিতে যেমন বলা হয়েছে , আপনার জাভা স্ক্রিপ্ট কোডটি একটি চরিত্রের ডেটা (সিডিএটিএ) ব্লকে স্থাপন করা উচিত। সুতরাং, জেএসএফের পদগুলিতে, এটি হবে:

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

এইভাবে আপনার জেএস কোডে এক্সএমএল-বিশেষ অক্ষর সম্পর্কে আপনাকে চিন্তা করার দরকার নেই। অতিরিক্ত বোনাস হিসাবে, এটি আপনাকে ব্রাউজারটিকে জেএস ফাইল ক্যাশে করার সুযোগ দেয় যাতে মোট প্রতিক্রিয়ার আকার কম হয়।

আরো দেখুন:


! [সিডিএটিএ [একটি মন্তব্য করা লাইন হওয়া উচিত নয়? উৎসুক.
Nacho321

@ নাচো ৩২২21: কেবলমাত্র যদি সামগ্রীর ধরণের application/xhtml+xmlপরিবর্তে ভুলভাবে সেট করা থাকে text/htmlতবে এর ফলে কিছু ব্রাউজারে মূলত এমএসআইই বেশ কয়েকটি ব্যর্থতা দেখা দেয়। "এক্সএইচটিএমএল জন্য জাভাস্ক্রিপ্ট লিখন" নথিও দেখুন। জেএসএফ-তে, আপনি <f:view contentType="text/html">জেএসএফ / ওয়েব ব্রাউজারকে স্বয়ংক্রিয়-অনুমানটি কাজটি করার অনুমতি না দিয়ে ব্যবহার করেন তবে আপনার প্রয়োজন হবে না । আরও দেখুন stackoverflow.com/tags/xhtml/info
BalusC

দ্রষ্টব্য: এটি কেবল জাভাস্কিপ্ট অপারেশনের ক্ষেত্রেই ঘটে না (যেহেতু আমি &amp;&amp;যদি আমার ত্রুটির উপরে একটি আই -স্টেটমেন্ট সঠিকভাবে ব্যবহার করি), তবে মন্তব্য লাইনেও ; আমার ত্রুটি চালু ছিল // TODO KevinC & Victor: some todo(এখন এটি পরিবর্তন করে and..)। এছাড়াও, এই পোস্টের জন্য অনেক ধন্যবাদ। ওপির মতো একই সমস্যার সমাধানের আগে আমি এটি পেরিয়ে এসেছি।
কেভিন ক্রুইজসেন

আপনার উত্তর ভুল এটি হওয়া উচিত & amp; & amp; & amp; এর পরিবর্তে
ফানকি-এনডি

4
@ ফানকি-এনডি: আমার ধারণা আপনি এটিকে & amp; এমপিতে বিভ্রান্ত করেছেন। এবার এটিকে মাথায় রেখে উত্তরটি পুনরায় পড়ুন।
বালুসসি

14

স্ক্রিপ্ট ট্যাগের ভিতরে আপনাকে একটি সিডিএটিএ ট্যাগ যুক্ত করতে হবে, যদি না আপনি ম্যানুয়ালি সমস্ত এক্সএইচটিএমএল অক্ষরগুলি অতিক্রম করতে চান এবং (যেমন: এটির &প্রয়োজন হবে &amp;) to উদাহরণ স্বরূপ:

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

সুতরাং আপনি উল্লেখ করুন যে কোডটি এইচটিএমএল পাঠ্য নয় তবে কেবলমাত্র হিসাবে ব্যবহৃত ডেটা।



2

আপনি যদি কোনও কারণের জন্য এক্সএইচটিএমএল ব্যবহার করেন তবে দ্রষ্টব্য যে এক্সএইচটিএমএল 1.0 সি 4 বলেছে: "যদি আপনার স্ক্রিপ্ট <বা & []]> বা - ব্যবহার করে তবে বাহ্যিক স্ক্রিপ্টগুলি ব্যবহার করুন” " এটি হ'ল কোনও scriptউপাদানের ভিতরে স্ক্রিপ্ট কোড এম্বেড করবেন না তবে এটি একটি পৃথক জাভাস্ক্রিপ্ট ফাইলের মধ্যে রাখুন এবং এর সাথে উল্লেখ করুন <script src="foo.js"></script>


0

ঠিক যদি ব্লগার থেকে কেউ উপস্থিত হন, Beautifyভিএসকোডে এক্সটেনশন ব্যবহার করার সময় আমার এই সমস্যা হয়েছিল। এটি ব্যবহার করবেন না, এটি ব্যবহার করবেন না beautify

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.