স্ব-সমাপনী স্ক্রিপ্ট উপাদানগুলি কেন কাজ করে না?


1346

ব্রাউজারগুলি সঠিকভাবে না চিনার কারণ:

<script src="foobar.js" /> <!-- self-closing script element -->

কেবল এটিই স্বীকৃত:

<script src="foobar.js"></script>

এটি কি এক্সএইচটিএমএল সমর্থনের ধারণাটি ভঙ্গ করে?

দ্রষ্টব্য: এই বিবৃতিটি কমপক্ষে সমস্ত আইইয়ের জন্য সঠিক (6-8 বিটা 2)।


12
ক্রোম এবং অপেরাতে কাজ করে
corymathews ory

46
Chrome এর কিছু সাম্প্রতিক সংস্করণ এটি ভেঙেছে বলে মনে হচ্ছে, স্ব-সমাপনী স্ক্রিপ্ট ট্যাগগুলি ক্রোমে আর কাজ করবে না
অ্যাডাম নেস

13
এটি কেবল স্ক্রিপ্ট ট্যাগ নয়। আমি বিশ্বাস করি না স্ব-বন্ধ হওয়া ডিভি ট্যাগগুলিও কাজ করে।
ডক

6
জুলাই ২০১১ পর্যন্ত, ক্রোম এবং ফায়ারফক্সের এই সমস্যা রয়েছে। "এটি কোনও বাগ নয়, এটি একটি বৈশিষ্ট্য" - সত্যই বিরক্তিকর।
মার্টিন কোনিসেক

4
এই আরও সাধারণ সংস্করণ জিজ্ঞাসা করা হল দুই দিন পর: stackoverflow.com/questions/97522/...
সিরো Santilli冠状病毒审查六四事件法轮功

উত্তর:


481

এক্সএইচটিএমএল 1 স্পেসিফিকেশন বলেছেন:

С.3। এলিমেন্ট মিনিমাইজেশন এবং খালি উপাদান উপাদান

এমন কোনও উপাদানের খালি উদাহরণ দেওয়া হয়েছে যার সামগ্রীর মডেলটি নয় EMPTY(উদাহরণস্বরূপ, একটি খালি শিরোনাম বা অনুচ্ছেদ) ন্যূনতম ফর্মটি ব্যবহার করবেন না (যেমন ব্যবহার করুন <p> </p>এবং নাও <p />)।

এক্সএইচটিএমএল ডিটিডি স্ক্রিপ্ট উপাদানগুলিকে হিসাবে উল্লেখ করে:

<!-- script statements, which may include CDATA sections -->
<!ELEMENT script (#PCDATA)>

111
তবুও, "করবেন না" "অবশ্যই" করা উচিত নয় same এটি একটি নির্দেশিকা নয় (বিভাগের শিরোনাম অনুসারে সামঞ্জস্যের জন্য), কোনও নিয়ম নয়।
কনরাড রুডলফ

42
আসলে, আমি এই বিধিনিষেধের জন্য কোনও ব্যবহার খুঁজে পাচ্ছি না :) এটি সম্পূর্ণ কৃত্রিম বলে মনে হচ্ছে।
স্কোয়াডেট

22
সঠিক উত্তরটি ওলাভক দিয়েছিলেন। এক্সএইচটিএমএল ১.০ এর পরিশিষ্ট সি জিনিসগুলি যেভাবে হয় তার কারণ নয় things জিনিসগুলি কীভাবে কাজ করা যায় তা কেবল এটিই।
hsivonen

32
এটি নির্দিষ্টকরণের কোনও আদর্শিক অংশ নয়। এক্সএইচএমএল সমর্থন করে না
কর্নেল

12
সমস্যাটি <script />এমন নয় যে অনুমানটি এটিকে অস্বীকার করে না, তবে সামগ্রীর ধরণের অ্যাপ্লিকেশন / এক্সএইচটিএমএল + এক্সএমএল না থাকলে ব্রাউজারগুলি এটিকে "নন-ট্যাগ-স্যুপ" হিসাবে ব্যাখ্যা করে না। দেখুন: stackoverflow.com/questions/348736/... @shabunc: ব্রাউজার পারে প্রদর্শিত তা বুঝতে কিন্তু আসলে কি ঘটছে সে পরে <P /> সামগ্রী নির্বাণ হল ভিতরে অনুচ্ছেদ, squadette এর উদ্ধৃতি ব্যাখ্যা কারণে মানে যে যেহেতু < p> খালি নয়, এটি স্ব-সমাপন হতে পারে না। এক্সএইচটিএমএল 1.1, এটি করতে স্ব-ক্লোজিং হবে।
জো

241

কি ব্র্যাড এবং squadette বলেছেন যোগ করার জন্য, স্ব-বন্ধের এক্সএমএল সিনট্যাক্স <script />আসলে হয় সঠিক এক্সএমএল, কিন্তু এটা জন্য অনুশীলনে কাজ করতে, আপনার ওয়েব সার্ভার এছাড়াও আপনার দস্তাবেজগুলি মত একটি XML MimeType সঙ্গে যথাযথভাবে গঠিত এক্সএমএল পাঠানোর জন্য প্রয়োজন application/xhtml+xmlHTTP- র মধ্যে কন্টেন্ট-টাইপ শিরোনাম (এবং হিসাবে নাtext/html )।

তবে এক্সএমএল মাইমটাইপ প্রেরণে আপনার পৃষ্ঠাগুলি আইই 7 দ্বারা পার্স করা যাবে না, যা কেবল পছন্দ করে text/html

ডাব্লু 3 থেকে :

সংক্ষেপে, 'অ্যাপ্লিকেশন / এক্সএইচটিএমএল + এক্সএমএল' এক্সএইচটিএমএল পারিবারিক নথির জন্য ব্যবহার করা উচিত এবং 'টেক্সট / এইচটিএমএল' ব্যবহারটি এইচটিএমএল-সামঞ্জস্যপূর্ণ এক্সএইচটিএমএল 1.0 নথিগুলির মধ্যে সীমাবদ্ধ থাকতে হবে। 'অ্যাপ্লিকেশন / এক্সএমএল' এবং 'টেক্সট / এক্সএমএল' মাই ব্যবহার করা যেতে পারে, তবে যখনই উপযুক্ত হয়, 'অ্যাপ্লিকেশন / এক্সএইচটিএমএল + এক্সএমএল' ব্যবহার করা উচিত সেই জেনেরিক এক্সএমএল মিডিয়া ধরণের পরিবর্তে।

আমি কয়েক মাস আগে এটি নিয়ে হতবাক হয়েছি এবং একমাত্র কার্যক্ষম (এফএফ 3 + এবং আই 7 এর সাথে সামঞ্জস্যপূর্ণ) সমাধানটি ছিল পুরানো <script></script>বাক্য গঠনটি এর সাথে ব্যবহার করাtext/html (এইচটিএমএল সিনট্যাক্স + এইচটিএমএল মাইমাইটাইপ) ।

যদি আপনার সার্ভারটি text/htmlএইচটিটিপি শিরোনামগুলিতে প্রেরণ করে , অন্যথায় সঠিকভাবে গঠিত এক্সএইচটিএমএল নথিগুলি সহ, এফএফ 3 + এটির এইচটিএমএল রেন্ডারিং মোড ব্যবহার করবে যার অর্থ এই<script /> কাজ করবে না (এটি একটি পরিবর্তন, ফায়ারফক্স আগে কম কঠোর ছিল)।

এটি http-equivআপনার নথির অভ্যন্তরে মেটা উপাদানগুলির সাথে কোনও এক্সিলিং , এক্সএমএল প্রোলগ বা ডক্টাইপ নির্বিশেষে ঘটবে - ফায়ারফক্সের শাখাগুলি একবার text/htmlশিরোনাম পেলে এটি নির্ধারণ করে যে এইচটিএমএল বা এক্সএমএল পার্সার নথির ভিতরে দেখায় এবং এইচটিএমএল পার্সার বুঝতে পারে না <script />


3
তাহলে কি এই সিদ্ধান্তে পৌঁছা ঠিক হয় যে আপনি যদি আই 7 এর জন্য সমর্থন বাদ দেন তবে পাঠ্য / এক্সএমএল প্রেরণ << স্ক্রিপ্ট /> এর জন্য ব্রড ব্রাউজার সমর্থন পাবেন?
ক্রিস মোসচিনি

7
সুতরাং, সংক্ষেপে, <স্ক্রিপ্ট /> কেবলমাত্র তখনই কাজ করবে যদি আপনার মাইমে টাইপের পৃষ্ঠার এক্সএইচটিএমএল / এক্সএমএল হয়। নিয়মিত পাঠ্য / এইচটিএমএল পৃষ্ঠাগুলির জন্য, এটি কাজ করবে না। এবং যদি আমরা "xhtml / xML" মাইমে টাইপটি ব্যবহার করার চেষ্টা করি তবে এটি IE সামঞ্জস্যতা ভঙ্গ করবে। সংক্ষিপ্তসার হিসাবে, শান্ত থাকুন এবং <script> ব্যবহার করুন ... </script> ধন্যবাদ জো ;-)
নবীন ইসরানী

1
দুর্দান্ত ব্যাখ্যা। লক্ষ্য করার মতো অন্য একটি বিষয় হ'ল ফায়ারফক্সে .htmlএকই কারণে মেটা ট্যাগ নির্বিশেষে একটি ট্যাগ-স্যুপ হিসাবে স্থানীয় ফাইল সরবরাহ করা হবে । এক্সএইচটিএমএল ফাইলগুলির জন্য, ফায়ারফক্স কেবল তাদের নাম দেওয়া থাকলে সেগুলি তাদের রেন্ডার করবে .xhtml
আলেকোভ

@ChrisMoschini। সম্ভবত, কিন্তু ব্যবহার application/xhtml+xml, না text/xml
ট্রিগ

166

কারও কৌতূহলের ক্ষেত্রে, চূড়ান্ত কারণটি হ'ল এইচটিএমএলটি মূলত এসজিএমএলের একটি উপভাষা ছিল, এটি এক্সএমএলের অদ্ভুত বড় ভাই। এসজিএমএল-জমিতে উপাদানগুলি ডিডিডিতে স্ব-সমাপনী (যেমন বিআর, এইচআর, ইনপুট), স্পষ্টভাবে নিকটবর্তী (যেমন পি, এলআই, টিডি), বা স্পষ্টভাবে নিকটবর্তী (যেমন টেবিল, ডিআইভি, স্ক্রিপ্ট) হিসাবে নির্দিষ্ট করা যেতে পারে। এক্সএমএল এর অবশ্যই এই সম্পর্কে কোন ধারণা নেই।

আধুনিক ব্রাউজারগুলির দ্বারা ব্যবহৃত ট্যাগ-স্যুপ পার্সারগুলি এই উত্তরাধিকার থেকে বিবর্তিত হয়েছে, যদিও তাদের পার্সিং মডেলটি আর খাঁটি এসজিএমএল নয়। এবং অবশ্যই, আপনার সাবধানে তৈরি করা এক্সএইচটিএমএলকে এক্সএমএল মাইম প্রকারের মাধ্যমে না পাঠালে খারাপভাবে লিখিত এসজিএমএল-অনুপ্রাণিত ট্যাগ-স্যুপ হিসাবে বিবেচিত হবে। এ কারণেই ...

<p><div>hello</div></p>

... ব্রাউজার দ্বারা ব্যাখ্যা করা যায়:

<p></p><div>hello</div><p></p>

... এটি একটি সুন্দর অস্পষ্ট বাগের রেসিপি যা আপনাকে ডিওএমের বিরুদ্ধে কোড দেওয়ার চেষ্টা করার সময় আপনাকে ফিট করতে পারে।


4
আমি কৌতুহলী. ব্রাউজার কেন সেভাবে এটি ব্যাখ্যা করতে পছন্দ করে?
আহমেদ অয়ন এক্সান

32
@AhmedAeonAxan: Pউপাদান থাকতে পারে না DIVউপাদান (এই অবৈধ এইচটিএমএল হয়), তাই ব্রাউজার পরোক্ষভাবে বন্ধ Pখোলার আগে উপাদান (হিসাবে "পরোক্ষভাবে closeable" সংজ্ঞায়িত) DIVট্যাগ। যাইহোক, ব্রাউজারগুলি এই ক্ষেত্রে আলাদাভাবে আচরণ করার ঝোঁক রাখে (যেহেতু তারা কোনও অবৈধ এইচটিএমএল করতে পারে)।
মিঃ হোয়েট

5
@ কোল জনসন না, এটি ট্যাগ স্যুপ নয়; গ্রীম বৈধ এবং অবৈধ এইচটিএমএল এর মধ্যে সীমানা কাঁকড়া করছে। ট্যাগ স্যুপ হ'ল লেখকরা যখন বিধিগুলির যত্ন নেন না, কারণ ব্রাউজারগুলি ত্রুটি সংশোধন ব্যবহার করে। </p>অন্যদিকে একটি গায়েবি শেষ ট্যাগটি আসলে এইচটিএমএল-এর সংজ্ঞার অংশ!
মিস্টার লিস্টার

3
@ এমআরলিস্টার - বাছাই করুন। "ট্যাগ স্যুপ" বর্ণনা করে যে কীভাবে এইচটিএমএল বিশ্লেষণ করা হয়, এটি কীভাবে রচনা করা হয় তা নয়। এটি এমন একটি শব্দ ছিল যা এইচটিএমএলকে বোঝার জন্য ব্যবহৃত কৌশলগত ব্রাউজারগুলিকে বর্ণনা করার জন্য ব্যবহৃত হয়েছিল এবং এটি এক্সএমএল কঠোরভাবে পার্সিংয়ের বিপরীতে দাঁড়িয়েছে। এক্সএমএল পার্সিং কেবল এক্সএমএল মাইম প্রকারের জন্য অনুমোদিত, তবে যেহেতু তারা কখনও ব্যাপকভাবে ব্যবহার করতে পারেনি তাই ব্রাউজারগুলি বিভিন্ন "ট্যাগ স্যুপ" স্কিমগুলিতে ফিরে এসেছিল এমনকি অন্যথায় বৈধ নথির জন্যও।
গ্রীম

8
এইচটিএমএল 5 অবৈধ মার্কআপ পরিচালনা করার নিয়মিত উপায় সহ 'ট্যাগ স্যুপ' পার্সিংকে প্রমিত করেছে। ততক্ষণ পর্যন্ত, ব্রাউজারগুলি বাছাই করে তাদের নিজের মতো করে অবৈধ মার্কআপ নিয়ে কী করবে তা অসঙ্গতি সৃষ্টি করে। বর্তমান ব্রাউজারগুলিতে এইচটিএমএল পার্সার হ'ল এখন পর্যন্ত রচিত একটি সফটওয়্যারগুলির অন্যতম উন্নত অংশ। সুস্পষ্টভাবে দ্রুত এবং বেশিরভাগ যে কোনও ইনপুট নিয়ে সামঞ্জস্যপূর্ণ ফলাফল তৈরি করতে পারে।
স্টিজন ডি উইট

161

অন্যরা "কীভাবে" এবং উদ্ধৃত অনুমানের উত্তর দিয়েছেন। <script/>বাগ রিপোর্টগুলি এবং মেলিং তালিকাগুলিতে অনেক ঘন্টা খনন করার পরে এখানে "কেন নেই " এর আসল কাহিনীটি এখানে রয়েছে ।


এইচটিএমএল 4

এইচটিএমএল 4 এসজিএমএল ভিত্তিক ।

যার SGML কিছু আছে shorttags যেমন <BR//, <B>text</>, <B/text/, অথবা <OL<LI>item</LI</OL>। এক্সএমএল প্রথম রূপ গ্রহণ করে, শেষটিকে ">" হিসাবে পুনরায় সংজ্ঞা দেয় (এসজিএমএল নমনীয়), যাতে এটি হয়ে যায়<BR/>

তবে এইচটিএমএল পুনরায় সংজ্ঞা দেয় নি, তাই এর অর্থ <SCRIPT/> হওয়া উচিত <SCRIPT>>
(হ্যাঁ, '>' অবশ্যই সামগ্রীর অংশ হওয়া উচিত, এবং ট্যাগটি এখনও নেই বন্ধ ))

একথাও ঠিক যে, এই এক্সএইচটিএমএল এর সঙ্গে সঙ্গতিপূর্ণ নয় এবং হবে অনেক সাইট বিরতি (সময় ব্রাউজার দ্বারা ছিল যথেষ্ট পরিপক্ক যত্ন এই সম্পর্কে ), তাই কেউ কিছু shorttags বাস্তবায়িত এবং স্পেসিফিকেশন তাদের বিরুদ্ধে উপদেশ

কার্যকরভাবে, সমস্ত 'ওয়ার্কিং' স্ব-সমাপ্ত ট্যাগগুলি প্রযুক্তিগতভাবে অ-কনফর্মেন্ট পার্সারগুলিতে নিষিদ্ধ শেষ ট্যাগযুক্ত ট্যাগ এবং প্রকৃতপক্ষে অবৈধ। এটি ডাব্লু 3 সি এটি এইচটিএমএল-সামঞ্জস্যপূর্ণ করে এক্সএইচটিএমএলকে রূপান্তরিত করতে সহায়তা করার জন্য এই হ্যাকটি নিয়ে এসেছিল

এবং <script>এর শেষ ট্যাগটি নিষিদ্ধ নয়

"স্ব-সমাপ্তি" ট্যাগটি এইচটিএমএল 4 এ একটি হ্যাক এবং অর্থহীন।


এইচটিএমএল 5

এইচটিএমএল পাঁচটি ধরণের ট্যাগ রয়েছে এবং কেবল 'শূন্য' এবং 'বিদেশি' ট্যাগগুলিকে স্ব-সমাপনের অনুমতি দেওয়া হয়

কারণ <script>শূন্য নয় (এটিতে সামগ্রী থাকতে পারে) এবং বিদেশী নয় (ম্যাথএমএল বা এসভিজির মতো),<script> আপনি এটি কীভাবে ব্যবহার করুন না কেন স্ব-বন্ধ হয়ে উঠতে পারে না।

কিন্তু কেন? তারা কি এটিকে বিদেশী হিসাবে বিবেচনা করতে পারে না, বিশেষ কেস তৈরি করতে পারে, বা কিছু কিছু করতে পারে?

এইচটিএমএল 5 এর লক্ষ্য এইচটিএমএল 4 এবং এক্সএইচটিএমএল বাস্তবায়নের সাথে পশ্চাদপটে সামঞ্জস্যপূর্ণ হতে হবে ; এটি এসজিএমএল বা এক্সএমএল ভিত্তিক নয়; এর বাক্য গঠনটি মূলত ডকুমেন্টিং এবং বাস্তবায়ন একত্রিত করার সাথে সম্পর্কিত। (এ কারণেই অবৈধ এইচটিএমএল 4 হওয়া সত্ত্বেও ইত্যাদি বৈধ এইচটিএমএল 5 ))<br/> <hr/>

স্ব-সমাপনি <script>এমন একটি ট্যাগ যেখানে বাস্তবায়নগুলি পৃথকভাবে ব্যবহৃত হত used এটা তোলে ক্রোম, সাফারি কাজ করতেন , এবং অপেরা ; আমার জ্ঞান অনুযায়ী এটি ইন্টারনেট এক্সপ্লোরার বা ফায়ারফক্সে কখনও কাজ করে না।

এইচটিএমএল 5 খসড়া তৈরি হওয়ার সময় এটি আলোচিত হয়েছিল এবং এটি বাতিল হয়ে গেছে কারণ এটি ব্রাউজারের সামঞ্জস্যতা ভঙ্গ করে । ওয়েব-পৃষ্ঠাগুলি যা স্ব-ক্লোজ স্ক্রিপ্ট ট্যাগটি পুরানো ব্রাউজারগুলিতে সঠিকভাবে রেন্ডার করতে পারে না। ছিল অন্যান্য প্রস্তাব , কিন্তু তারা পারেন সামঞ্জস্য সমস্যা সমাধানের করতে পারবে না।

খসড়া প্রকাশ হওয়ার পরে, ওয়েবকিট পার্সারটিকে সামঞ্জস্য করতে আপডেট করেছে।

<script>এইচটিএমএল 5 এবং এক্সএইচটিএমএল 1 এর পিছনে সামঞ্জস্যের কারণে এইচটিএমএল 5 এ স্ব-সমাপনি ঘটে না।


এক্সএইচটিএমএল 1 / এক্সএইচটিএমএল 5

সত্যই এক্সএইচটিএমএল হিসাবে পরিবেশন করা হলে <script/>, অন্যান্য উত্তর হিসাবে সত্যিই বন্ধ থাকে বলেছে।

ছাড়া বৈশিষ্ট বলেছেন এটা করা উচিত যখন HTML হিসাবে দায়িত্ব পালন করেন কাজ করেছি:

এক্সএইচটিএমএল ডকুমেন্টস ... বেশিরভাগ এইচটিএমএল ব্রাউজারের সাথে সামঞ্জস্যপূর্ণ হওয়ায় ইন্টারনেট মিডিয়া টাইপ "টেক্সট / এইচটিএমএল" [আরএফসি 2854] দিয়ে লেবেলযুক্ত হতে পারে।

তো, কী হল?

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

যদি প্রথম ব্রাউজার যুদ্ধটি আইই 6 দিয়ে শেষ না হয়, এক্সএইচটিএমএলও তালিকায় থাকতে পারে। তবে এটি শেষ হয়ে গেল। এবং আই 6 এর এক্সএইচটিএমএল নিয়ে সমস্যা আছে। বস্তুত ইন্টারনেট সমর্থন দেয়নি সঠিক MIME প্রকার এ সব , অত্যাচার সবাই ব্যবহার করতে text/htmlএক্সএইচটিএমএল কারণ ইন্টারনেট অনুষ্ঠিত প্রধান মার্কেট শেয়ার একটি সম্পূর্ণ দশক জন্য।

এবং কন্টেন্ট স্নিফিং সত্যিই খারাপ হতে পারে এবং লোকেরা বলছে এটি বন্ধ করা উচিত

পরিশেষে, দেখা যাচ্ছে যে ডাব্লু 3 সি এর অর্থ XHTML কে স্নিগ্ধ করার যোগ্য নয় : ডকুমেন্টটি , এইচটিএমএল এবং এক্সএইচটিএমএল এবং বিধি উভয়ইContent-Type । কেউ বলতে পারেন যে তারা "কেবল আমাদের অনুমান অনুসরণ করুন" এবং কী ব্যবহারিক ছিল তা উপেক্ষা করে দৃ on়ভাবে দাঁড়িয়ে ছিলেন । একটি ভুল যা পরবর্তী এক্সএইচটিএমএল সংস্করণগুলিতে অব্যাহত ছিল

যাইহোক, এই সিদ্ধান্তটি ফায়ারফক্সের জন্য বিষয়টি মীমাংসা করে । ক্রোমের জন্মের 7 বছর আগে ; অন্য উল্লেখযোগ্য ব্রাউজার ছিল না। এভাবেই সিদ্ধান্ত নেওয়া হয়েছিল।

ডক্টাইপটি একা নির্দিষ্ট করে নীচের নির্দিষ্টকরণের কারণে এক্সএমএল পার্সিং ট্রিগার করে না।


1
@ অ্যান্ডি আপনি যখন স্ব-সমাপনী <script> লেখেন, তখন প্রধান ব্রাউজারগুলি এটি বন্ধ বলে মনে করে না এবং উত্তরোত্তর এইচটিএমএলটিকে জাভাস্ক্রিপ্ট হিসাবে পার্স করবে, যার ফলে এই পুরানো ব্রাউজারগুলিতে বৈধ এইচটিএমএল 5 টি ভাঙবে। এভাবে প্রস্তাব প্রত্যাখ্যান করা হয়। লিঙ্কযুক্ত এইচটিএমএল 5 মেলিং তালিকায় এটি ব্যাখ্যা করা হয়েছে।
শেপি

2
@ অ্যান্ডি: আপনি যা বর্ণনা করছেন তা হচ্ছে সামনের সামঞ্জস্যতা - নতুন সংকলক / দোভাষী / পার্সার দিয়ে কাজ করার জন্য পুরানো কোডের ক্ষমতা code পিছনের সামঞ্জস্যতা পুরানো সংকলক / দোভাষী / পার্সারের সাথে কাজ করার জন্য নতুন কোডের সক্ষমতা। সুতরাং হ্যাঁ, পশ্চাদপটে সামঞ্জস্যতা বিষয়টি হ'ল অন্যথায় নতুন ফটকে মাথায় রেখে লেখা পৃষ্ঠাগুলি পুরানো ব্রাউজারগুলিতে কাজ করবে না (এবং হ্যাঁ, পুরানো ব্রাউজারগুলিতে যতটা সম্ভব নতুন কোড কাজ করার চেষ্টা করার চেষ্টা করা এবং ওয়েব প্রোগ্রামিংয়ের একটি traditionতিহ্য)।
slebetman

3
@ দিমিত্রি বাস্তবতাটি হচ্ছে, স্ব-বদ্ধ স্ক্রিপ্টকে অস্বীকার করা একপথের রাস্তা। লিঙ্কযুক্ত হিসাবে , স্ব-বদ্ধ <স্ক্রিপ্ট> সমস্ত ব্রাউজারগুলিকে ভেঙে দেবে , ব্যবহারকারীরা খালি পৃষ্ঠা দেখতে পাবেন - গেম কনসোল, ইন্টারনেট টিভি, নতুন কর্পোরেট উইন 7 পিসিতে আইই 11 , কয়েক মিলিয়ন জাভা রানটাইম , বা কোটি কোটি স্মার্টফোন। আপনি বেশিরভাগ ডিভাইসে বেশিরভাগ ভাষার বেশিরভাগ ওয়েবভিউ আপগ্রেড করতে পারেন? যদি এইচটিএমএল 5 চেষ্টা করে যে তারা এক্সএইচটিএমএল 2 এর মতো ব্যর্থ হয়েছে।
শেপি


2
কিছুটা সংশোধন: যে ট্যাগগুলিতে এইচটিএমএল-এ স্ব-বদ্ধ হিসাবে কাজ করা প্রদর্শিত হবে সেগুলি option চ্ছিক শেষ ট্যাগগুলির সাথে নয় , তবে নিষিদ্ধ প্রান্তযুক্ত ট্যাগগুলি (খালি, বা শূন্য, ট্যাগ)। End চ্ছিক শেষ ট্যাগ সহ ট্যাগগুলি যেমন <p>বা <li>স্ব-বদ্ধ হওয়া যায় না কারণ তাদের বিষয়বস্তু থাকতে পারে, সুতরাং কোডের মতো কোড এর <p/>চেয়ে বেশি কিছু নয় যে কোনও (ত্রুটিযুক্ত) ট্যাগ ট্যাগ শুরু করবে এবং তার পরে থাকা সামগ্রীগুলি যদি এই উপাদানটিতে অনুমোদিত হয় তবে , এটি ভিতরে শেষ হবে।
ইলিয়া স্ট্রেলটসিন

44

ইন্টারনেট এক্সপ্লোরার 8 এবং এর আগের এক্সএইচটিএমএল পার্সিং সমর্থন করে না। এমনকি যদি আপনি একটি এক্সএমএল ঘোষণা এবং / অথবা একটি এক্সএইচটিএমএল ডক্টিপ ব্যবহার করেন, পুরাতন আইই এখনও ডকুমেন্টটিকে সরল এইচটিএমএল হিসাবে পার্স করে। এবং সাধারণ এইচটিএমএলে, স্ব-সমাপনী বাক্য গঠন সমর্থনযোগ্য নয়। পিছনের স্ল্যাশটি কেবল উপেক্ষা করা হবে, আপনাকে একটি স্পষ্ট ক্লোজিং ট্যাগ ব্যবহার করতে হবে।

এমনকি এক্সএইচটিএমএল পার্সিংয়ের জন্য সমর্থনকারী ব্রাউজারগুলি, যেমন আই 9 এবং তারপরেও, আপনি যদি কোনও এক্সএমএল সামগ্রী প্রকারের সাথে দস্তাবেজটি পরিবেশন না করেন তবে ডকুমেন্টটিকে এইচটিএমএল হিসাবে পার্স করবে। তবে সেক্ষেত্রে পুরানো আইই ডকুমেন্টটি একেবারেই প্রদর্শন করবেন না!


9
"IE এক্সএইচটিএমএল পার্সিং সমর্থন করে না।" এই লেখাটি যখন IE সংস্করণগুলির জন্য সত্য ছিল তবে এটি আর সত্য নয়।
এরিকল

@ এরিকলও আপনি পরিষ্কার করতে পারেন যে আইই এর কোন সংস্করণ এটি ঠিক করেছে? (এবং কোনও নির্দিষ্ট শর্ত - যেমন বৈধ
ডক্টাইপ

2
@ সানলিফ আইএইচ এটি প্রথম সংস্করণ যা এক্সএইচটিএমএল এর সম্পূর্ণ সমর্থন সহ। ব্লগস.এমএসডন.কম
বি /

28

উপরের লোকেরা ইস্যুটি ইতিমধ্যে বেশ ব্যাখ্যা করেছে, তবে একটি বিষয় যা স্পষ্ট করে দিতে পারে তা হ'ল <br/>এইচটিএমএল নথিগুলিতে লোকেরা এবং এ জাতীয় সময় ব্যবহার করলেও /এ জাতীয় অবস্থানে থাকা যে কোনওটিকেই মূলত উপেক্ষা করা হয়, এবং কেবল যখন তৈরির চেষ্টা করা হয় তখনই ব্যবহৃত হয় এক্সএমএল এবং এইচটিএমএল হিসাবে পার্সেবল কিছু something <p/>foo</p>উদাহরণস্বরূপ চেষ্টা করুন , এবং আপনি একটি নিয়মিত অনুচ্ছেদ পান।


22

স্ব-সমাপনী স্ক্রিপ্ট ট্যাগটি কাজ করবে না, কারণ স্ক্রিপ্ট ট্যাগটিতে ইনলাইন কোড থাকতে পারে এবং কোনও বৈশিষ্ট্যের উপস্থিতির ভিত্তিতে এই বৈশিষ্ট্যটি চালু বা বন্ধ করতে এইচটিএমএল যথেষ্ট স্মার্ট নয়।

অন্যদিকে, এইচটিএমএলের বাইরের সংস্থাগুলির উল্লেখগুলি অন্তর্ভুক্ত করার জন্য একটি দুর্দান্ত ট্যাগ রয়েছে: <link>ট্যাগটি, এবং এটি স্ব-বন্ধ হতে পারে। এটি ইতিমধ্যে স্টাইলশিট, আরএসএস এবং পরমাণু ফিডস, ক্যানোনিকাল ইউআরআই এবং অন্যান্য ধরণের গুডি অন্তর্ভুক্ত করতে ব্যবহৃত হয়েছে। জাভাস্ক্রিপ্ট কেন নয়?

আপনি যদি স্ক্রিপ্ট ট্যাগটি স্বাবলম্বী হন তবে আপনি যা বলেছিলেন তা করতে পারবেন না, তবে স্মার্ট না হলেও বিকল্প রয়েছে। আপনি নিজের জাভাস্ক্রিপ্টকে স্ব-সমাপ্ত লিঙ্ক ট্যাগ এবং লিঙ্কটি কোনও ধরণের পাঠ্য / জাভাস্ক্রিপ্ট এবং স্ক্রিপ্ট হিসাবে rel এর মাধ্যমে ব্যবহার করতে পারেন, নীচের মতো কিছু:

<link type="text/javascript" rel ="script" href="/path/tp/javascript" />

4
আমি এটি পছন্দ করি, যদিও এটি "স্মার্ট" নয় কেন?
জোশ এম

5
কারণ স্ক্রিপ্ট লোড করার ঠিক কাজটি সম্পাদনের জন্য একটি পূর্বনির্ধারিত স্ক্রিপ্ট ট্যাগ রয়েছে .. আপনি অন্য কিছু ব্যবহার করে বিষয়গুলিকে কেন বিভ্রান্ত করবেন? নখের একটি হাতুড়ি হাতুড়ি .. কোনও জুতো ব্যবহার করা কি স্মার্ট হবে?
ডেভ লরেন্স

8
@ ডেভেল - এবং আমাদের <style>ট্যাগ রয়েছে, তবে বহিরাগত সিএসএস ফাইলের জন্য লিংক ট্যাগগুলি ব্যবহার করুন। লিঙ্ক ট্যাগের সংজ্ঞা: "<লিঙ্ক> ট্যাগ নথি এবং একটি বাহ্যিক উত্সের মধ্যে একটি লিঙ্ককে সংজ্ঞায়িত করে।" পুরোপুরি যুক্তিযুক্ত মনে হচ্ছে যে লিংক ট্যাগটি বহিরাগত সিএসএস বা জেএসের জন্য ব্যবহৃত হবে ... এটি তার জন্য ... বাহ্যিক ফাইলগুলিতে লিঙ্ক করা। নোট আমি স্পিক / ক্রস ব্রাউজারনেস / ইত্যাদি কথা বলছি না, আমি কেবল সিএসএস এবং জেএস উভয়কেই আনার জন্য লিংক ট্যাগগুলি ব্যবহার করার যৌক্তিক প্রকৃতির উপর মন্তব্য করছি ... এটি যদি এমন হয় তবে এটি আসলে অনেক অর্থবোধ করবে । জুতো [সাদৃশ্য] ফিট করে তা নিশ্চিত নয়।
জিম্বো জনি

20

এক্সএমএল এবং এক্সএইচটিএমএল থেকে পৃথক, এইচটিএমএলটির স্ব-সমাপনী বাক্য গঠন সম্পর্কে কোনও জ্ঞান নেই। ব্রাউজারগুলি যে এক্সএইচটিএমএলকে এইচটিএমএল হিসাবে ব্যাখ্যা করে তা জানে না/ অক্ষরটি ইঙ্গিত দেয় যে ট্যাগটি স্ব-বন্ধ হওয়া উচিত; পরিবর্তে তারা এটি একটি খালি বৈশিষ্ট্যের মতো ব্যাখ্যা করে এবং পার্সার এখনও মনে করে ট্যাগটি 'খোলা' রয়েছে।

ঠিক যেমন <script defer>আচরণ করা হয় <script defer="defer">, <script />তেমন আচরণ করা হয় <script /="/">


33
এই ব্যাখ্যা যেমন মার্জিত, এটি আসলে ভুল। যদি এটি সত্য হয় তবে ডিওমে স্ক্রিপ্ট উপাদানটির জন্য একটি "/" বৈশিষ্ট্য থাকবে। আমি আইই, ফায়ারফক্স এবং অপেরা পরীক্ষা করে দেখেছি এবং এদের কোনওটিরই আসলে এমন বৈশিষ্ট্য নেই।
আলহকি

11
/ একটি বৈধ বৈশিষ্ট্য নামের অক্ষর নয়, তাই এটি বাতিল করা হয়েছে। অন্যথায় এই ব্যাখ্যা বেশ পরিষ্কার।
হলভোরগুলি - মনিকা

1
প্রকৃতপক্ষে, কিছু HTML পার্সার (এবং বিশেষত ভ্যালিডিটার) /নেট (নাল এন্ড ট্যাগ) নির্মাণের অংশ হিসাবে ব্যাখ্যাটি ব্যাখ্যা করতে পারে ।
ইলিডানএস

18

ইন্টারনেট এক্সপ্লোরার 8 এবং তার বেশি বয়সী এক্সএইচটিএমএল এর জন্য যথাযথ মাইম টাইম সমর্থন করে না application/xhtml+xml। আপনি যদি এক্সএইচটিএমএল হিসাবে ইন্টারনেট পরিবেশন করে text/htmlযা আপনাকে ইন্টারনেট এক্সপ্লোরারের এই পুরানো সংস্করণগুলির জন্য যে কোনও কিছু করতে হবে, এটি এইচটিএমএল 4.01 হিসাবে ব্যাখ্যা করা হবে। আপনি কেবলমাত্র এমন কোনও উপাদানগুলির সাথে সংক্ষিপ্ত বাক্য গঠন ব্যবহার করতে পারেন যা ক্লোজিং ট্যাগটিকে বাদ দেওয়ার অনুমতি দেয়। এইচটিএমএল 4.01 নির্দিষ্টকরণ দেখুন ification

এক্সএমএল 'শর্ট ফর্ম' এর / / নামে একটি গুণাবলী হিসাবে ব্যাখ্যা করা হয়, যা (কারণ কোনও সমান চিহ্ন নেই) "/" এর অন্তর্নিহিত মান হিসাবে ব্যাখ্যা করা হয়। এটি এইচটিএমএল 4.01 এ কঠোরভাবে ভুল - অঘোষিত বৈশিষ্ট্য অনুমোদিত নয় - তবে ব্রাউজারগুলি এটিকে উপেক্ষা করবে।

IE9 এবং পরে সমর্থন এক্সএইচটিএমএল 5 সঙ্গে পরিবেশিত application/xhtml+xml


আইই 9 এক্সএইচটিএমএল সমর্থন করে এবং আইই আর> 51% নেই। আপনি আপনার উত্তর আপডেট করতে পারেন?
দামিয়ান ইয়ারিক

5

এর কারণ স্ক্রিপ্ট ট্যাগ কোনও বাতিল কর্ম নয়।

একটি ইন এইচটিএমএল ডকুমেন্ট - অকার্যকর উপাদান না এ সব একটি "বন্ধ ট্যাগ" দরকার!

ইন XHTML , সবকিছু, জেনেরিক হয় সেইজন্য তারা সব প্রয়োজন পরিসমাপ্তি যেমন একটি "ক্লোজিং ট্যাগ"; বিআর সহ, একটি সরল লাইন ব্রেক, যেমন <br></br>বা এর শর্টহ্যান্ড <br />

তবে, স্ক্রিপ্ট এলিমেন্টটি কখনই বাতিল বা প্যারাম্যাট্রিক এলিমেন্ট হয় না, কারণ স্ক্রিপ্ট ট্যাগ অন্য কোনও কিছুর আগে, ব্রাউজারের নির্দেশ, কোনও ডেটা বিবরণ ঘোষণার নয়।

মূলত, একটি শব্দার্থক সমাপ্তির নির্দেশিকা উদাহরণস্বরূপ, "ক্লোজিং ট্যাগ" কেবলমাত্র সেই প্রক্রিয়া নির্দেশিকাগুলির জন্য প্রয়োজন যারা যিনি শব্দার্থতত্ত্বে সফল উত্তর দিয়ে শেষ করতে পারবেন না। এই ক্ষেত্রে:

<H1>শব্দার্থকগুলি নিম্নলিখিত দ্বারা শেষ করা যায় না <P>কারণ এটি নিজস্ব শব্দার্থতত্ত্বগুলি ওভাররাইড করার জন্য যথেষ্ট পরিমাণে বহন করে না এবং অতএব পূর্ববর্তী এইচ 1 নির্দেশাবলীটি সমাপ্ত করে। যদিও এটি স্ট্রিমটিকে একটি নতুন অনুচ্ছেদের লাইনে বিভক্ত করতে সক্ষম হবে , তবে বর্তমান ফন্টের আকার এবং স্ট্রিমের লাইন-উচ্চতা প্রবাহকে প্রবাহিত করে এটি "যথেষ্ট শক্তিশালী" নয় , অর্থাৎ এইচ 1 থেকে ফাঁস হবে (কারণ পি তে নেই) তবে এটি নয় )।

এইভাবে এবং কেন "/" (সমাপ্তি) সংকেত উদ্ভাবন করা হয়েছে।

জেনেরিক নো-ডিফিকেশন টার্মিনেশন ট্যাগের মতো < />, মুখোমুখি ক্যাসকেড থেকে কোনও একক পতনের জন্য যথেষ্ট হত, উদাহরণস্বরূপ: <H1>Title< />তবে এটি সর্বদা হয় না, কারণ আমরা স্ট্রিমের একাধিক মধ্যবর্তী ট্যাগিং "বাসা বাঁধতে" সক্ষম হতে চাই: বিভক্ত মোড়ানো / অন্য ক্যাসকেডে পড়ার আগে টরেন্টগুলিতে into ফলস্বরূপ জেনেরিক টার্মিনেটর যেমন সমাপ্তির < />কোনও সম্পত্তি লক্ষ্য নির্ধারণ করতে সক্ষম হবে না। উদাহরণস্বরূপ: <b>গা <i>bold় বোল্ড-ইটালিকের < /> ইটালিক </> স্বাভাবিক। নিঃসন্দেহে আমাদের অভিপ্রায়টি সঠিকভাবে পেতে ব্যর্থ হবে এবং সম্ভবত এটি বোল্ড বোল্ড-ইটালিক সাহসিক স্বাভাবিক হিসাবে ব্যাখ্যা করবে ।

এভাবেই একটি মোড়কের ধারণাটি জন্মায় container (এই ধারণাগুলি এতটাই সাদৃশ্য যে এটি সনাক্ত করা অসম্ভব এবং কখনও কখনও একই উপাদান উভয়ই থাকতে পারে <H1>wra একই সাথে একই সাথে দুটি মোড়ক এবং ধারক উভয়ই থাকে। যেখানে <B>কেবল একটি শব্দার্থ মোড়ক রয়েছে)। আমাদের একটি সমতল, কোনও শব্দার্থ পাত্রের দরকার হবে। এবং অবশ্যই একটি ডিআইভি এলিমেন্টের উদ্ভাবনটি এসেছিল।

ডিআইভি উপাদানটি আসলে একটি 2 বিআর-ধারক। অবশ্যই সিএসএসের আগমন পুরো পরিস্থিতিটিকে অযৌক্তিক করে তুলেছে অন্যথায় এমনটি ঘটত যেগুলি পরোক্ষভাবে - অনেকগুলি দুর্দান্ত পরিণতির সাথে একটি দুর্দান্ত বিভ্রান্তি সৃষ্টি করেছিল!

সিএসএসের সাহায্যে আপনি সহজেই নতুন উদ্ভাবিত ডিআইভির বিআর আচরণের পরে নেটিভ প্রাকটি ওভাররাইড করতে পারেন, এটি প্রায়শই "ডু হুিং কনটেইনার" হিসাবে উল্লেখ করা হয়। যা স্বাভাবিক, ভুল! ডিআইভিগুলি হ'ল ব্লক উপাদান এবং শেষের সংকেতের আগে এবং পরে উভয়ই স্রোতের রেখাটি ভঙ্গ করবে। শীঘ্রই ওয়েবে ওয়েব ডিআইভি-ইটিস পৃষ্ঠাতে ভুগতে শুরু করে। তাদের বেশিরভাগ এখনও রয়েছেন।

যে কোনও এইচটিএমএল ট্যাগের নেটিভ আচরণকে সম্পূর্ণরূপে ওভাররাইড এবং সম্পূর্ণরূপে নতুনভাবে সংজ্ঞায়িত করার সক্ষমতা সহ সিএসএসের আগমন, কোনওভাবে এইচটিএমএল অস্তিত্বের পুরো অর্থকে বিভ্রান্ত করতে ও অস্পষ্ট করতে পরিচালিত ...

হঠাৎ করে সমস্ত এইচটিএমএল ট্যাগগুলি উপস্থিত হয়ে উঠল যেন অচল হয়ে পড়েছিল, সেগুলি বিকৃত হয়ে গেছে, তাদের সমস্ত আসল অর্থ, পরিচয় এবং উদ্দেশ্য ছিনিয়ে নিয়েছে। কোনওভাবে আপনি এই ধারণাটি অর্জন করতে চান যে তাদের আর দরকার নেই। বলছেন: একটি একক ধারক-মোড়ক ট্যাগ সমস্ত ডেটা উপস্থাপনের জন্য যথেষ্ট। কেবল প্রয়োজনীয় বৈশিষ্ট্য যুক্ত করুন। পরিবর্তে অর্থবহ ট্যাগ কেন নেই; আপনি যেতে যেতে ট্যাগের নাম উদ্ভাবন করুন এবং সিএসএসকে বাকীগুলি দিয়ে বিরক্ত করুন।

এক্সএইচটিএমএল এইভাবেই জন্মগ্রহণ করেছিল এবং অবশ্যই দুর্দান্ত ভোঁতা, নতুন আগতদের দ্বারা এত বেশি মূল্যবান মূল্য দিয়েছিল এবং কী কী, এবং এগুলির সবই হতাশ উদ্দেশ্য কী purpose ওয়ার্ল্ড ওয়াইড ওয়েব থেকে ডাব্লু 3 সি চলে গেল কী ভুল, কমরেডস? !!

এইচটিএমএলের উদ্দেশ্য হ'ল মানব প্রাপকের কাছে অর্থবহ ডেটা প্রবাহিত করা

তথ্য সরবরাহ করা।

আনুষ্ঠানিক অংশটি কেবল তথ্য সরবরাহের স্পষ্টতাকে সহায়তা করার জন্য রয়েছে। এক্সএইচটিএমএল তথ্যগুলিতে সামান্যতম বিবেচনা দেয় না। - এটির কাছে তথ্যটি একেবারেই অপ্রাসঙ্গিক।

বিষয়টির সর্বাধিক গুরুত্বপূর্ণ বিষয়টি জানা এবং বুঝতে সক্ষম হওয়া যে এক্সএইচটিএমএল কেবল কিছু বর্ধিত এইচটিএমএল নয় , এক্সএইচটিএমএল সম্পূর্ণ ভিন্ন জন্তু; ভিত্তি আপ; এবং তাই এগুলি পৃথক রাখা বুদ্ধিমানের কাজ।


3

'ট্রু এক্সএইচটিএমএল', 'ফ্যাক্স এক্সএইচটিএমএল' এবং এইচটিএমএল-এর মধ্যে পার্থক্য পাশাপাশি সার্ভার-প্রেরিত এমআইএমআই টাইপের গুরুত্ব এখানে ইতিমধ্যে বর্ণনা করা হয়েছে । আপনি যদি এখনই এটি ব্যবহার করে দেখতে চান তবে সক্ষম ব্রাউজারগুলির জন্য স্ব-বদ্ধ স্ক্রিপ্ট ট্যাগ সহ লাইভ পূর্বরূপ সহ সাধারণ সম্পাদনাযোগ্য স্নিপেট এখানে রয়েছে:

div { display: flex; }
div + div {flex-direction: column; }
<div>Mime type: <label><input type="radio" onchange="t.onkeyup()" id="x" checked  name="mime"> application/xhtml+xml</label>
<label><input type="radio" onchange="t.onkeyup()" name="mime"> text/html</label></div>
<div><textarea id="t" rows="4" 
onkeyup="i.src='data:'+(x.checked?'application/xhtml+xml':'text/html')+','+encodeURIComponent(t.value)"
><?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
[<!ENTITY x "true XHTML">]>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
  <p>
    <span id="greet" swapto="Hello">Hell, NO :(</span> &x;.
    <script src="data:text/javascript,(g=document.getElementById('greet')).innerText=g.getAttribute('swapto')" />
    Nice to meet you!
    <!-- 
      Previous text node and all further content falls into SCRIPT element content in text/html mode, so is not rendered. Because no end script tag is found, no script runs in text/html
    -->
  </p>
</body>
</html></textarea>

<iframe id="i" height="80"></iframe>

<script>t.onkeyup()</script>
</div>

আপনি Hello, true XHTML. Nice to meet you!নীচে টেক্সটরিয়া দেখতে হবে ।

অক্ষম ব্রাউজারগুলির জন্য আপনি টেক্সারিয়ার সামগ্রী অনুলিপি করতে পারেন এবং এটি ফাইল .xhtml(বা .xht) এক্সটেনশান সহ সংরক্ষণ করতে পারেন ( এই ইঙ্গিতটির জন্য আলেককে ধন্যবাদ )।


2

কেবলমাত্র আধুনিক উত্তর হ'ল ট্যাগটি সেইভাবে বাধ্যতামূলক হিসাবে চিহ্নিত করা হয়

ট্যাগ বাদ দেওয়া কিছুই নয়, শুরু এবং শেষ ট্যাগ উভয়ই বাধ্যতামূলক।

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script

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