2010-11-12 14 views
7

पर असाइन करते समय इस पृष्ठ पर http://blog.zacharyvoase.com/2010/11/11/sockets-and-nodes-i/, जावास्क्रिप्ट कंसोल में निम्न कोड चलाकर एक अपवाद फेंक देगा।एचओएम अपवाद एचटीएमएल इकाइयों को आंतरिक HTML

var div = document.createElement('div'); div.innerHTML = "»"; 
  • क्रोम 8.0.552.28 मैक: त्रुटि: INVALID_STATE_ERR: डोम अपवाद 11
  • Firebug फ़ायरफ़ॉक्स 3.6.12 में मैक: NS_ERROR_DOM_SYNTAX_ERR एक अमान्य या अवैध स्ट्रिंग निर्दिष्ट किया गया था
  • सफारी 5.0.2 मैक: त्रुटि: NO_MODIFICATION_ALLOWED_ERR: डोम अपवाद 7
    ओपेरा: ठीक

काम करता है लेकिन यह अन्य सभी पृष्ठों मैंने कोशिश में ठीक काम करता है। मेरे प्रश्न पृष्ठ और के बारे में विशेष क्या है क्रोम और फ़ायरफ़ॉक्स एक अपवाद क्यों फेंकता है?

इकाई का उपयोग किए बिना सीधे चरित्र लिखना ठीक काम करता है।

var div = document.createElement('div'); div.innerHTML = "»"; 

अन्य इकाइयों का उपयोग करना भी काम करता है, उदा।

var div = document.createElement('div'); div.innerHTML = "<"; 
+0

क्रोम का कौन सा संस्करण? मुझे कोई नहीं दिख रहा है, लेकिन मैं क्रोम 9.0 देव में हूं। – theazureshadow

+0

मुझे फ़ायरबग में कोई त्रुटि दिखाई नहीं दे रही है ... –

+0

धन्यवाद। मैंने विवरण में संस्करण जानकारी जोड़ दी है। – Arrix

उत्तर

16

मैं अपने स्वयं के प्रश्न का उत्तर दे रहा हूं।

संक्षिप्त उत्तर: यह ब्राउज़र सीमा के कारण है।

यदि किसी पृष्ठ को कुछ ब्राउज़रों द्वारा एक्सएचटीएमएल के रूप में पहचाना जाता है, तो मानक द्वारा अनुमत नामित वर्ण इकाइयों का केवल एक सबसेट आंतरिक HTML असाइनमेंट के लिए समर्थित है।

विशेष रूप से मेरे परीक्षण में, ऐसा लगता है कि मोज़िला और वेबकिट, केवल ", &, में < और > innerHTML काम में अनुमति दी जाती है।

मेरे परीक्षण कोड यहाँ उपलब्ध है: https://gist.github.com/673901

एक्सएचटीएमएल एक "बेहतर" और क्लीनर HTML के XML में पुनर्निर्मित संस्करण है। एक्सएचटीएमएल 1.1 को एचटीएमएल का उत्तराधिकारी और भविष्य माना जाता था। हालांकि, एचटीएमएल 5 को अपनाने के साथ ऐसा होने की संभावना नहीं है।

एचटीएमएल के विपरीत, जिसके लिए एक समर्पित HTML पार्सर की आवश्यकता होती है, एक एक्सएचटीएमएल दस्तावेज़ को सामान्य एक्सएमएल पार्सर द्वारा पार्स किया जा सकता है। कम से कम मोज़िला और वेबकिट में, एक्सएचटीएमएल और एचटीएमएल विभिन्न कोड पथों के माध्यम से जाते हैं। यह समझ में आता है कि एचटीएमएल कोड पथ है जहां अधिकतर प्रयास किए जाते हैं और बेहतर परीक्षण भी किया जाता है क्योंकि एक्सएचटीएमएल से कहीं अधिक HTML दस्तावेज़ हैं।

यह ध्यान देने योग्य है कि क्या दस्तावेज़ को एक्सएचटीएमएल के रूप में पहचाना जाता है, दस्तावेज़ सामग्री की बजाय प्रभावी एमआईएम प्रकार द्वारा निर्धारित किया जाता है।

निष्कर्ष यह है कि यदि आप एक्सएचटीएमएल के साथ काम कर रहे हैं, तो सुनिश्चित करें कि आप नामांकित इकाइयों को संख्यात्मक इकाइयों में परिवर्तित करें (उदा।   -> ) .innerHTML को असाइन करने से पहले।

+3

+1, इसे स्वयं निकालने के लिए अच्छी तरह से किया गया। –

+0

ध्यान दें कि एचटीएमएल 5 में एक HTML और एक एक्सएचटीएमएल क्रमबद्धता है। इसके अलावा, एक्सएचटीएमएल में भीतरी एचटीएमएल अब बहुत भंगुर है, लेकिन यह शायद एचटीएमएल 5 में आंतरिक HTML के वास्तविक विनिर्देश के साथ बेहतर होगा। – Ms2ger

+0

डरावनी बात यह है कि अगर मैं HTML पर HTML दस्तावेज़ बना देता हूं ** उसी पृष्ठ ** ('document.documentElement.innerHTML') मुझे यह त्रुटि भी मिलती है। –

1

ऐसा प्रतीत होता है कि यह एन्कोडेड HTML जोड़ने की कोशिश कर रहा है, लेकिन यह इसे विकृत के रूप में पहचान रहा है।
var div = document.createElement('div'); div.innerHTML = "»"; आपको क्या चाहिए?

प्रति टिप्पणी: var dv = document.createElement('div'); dv.innerHTML = "»"; document.getElementById('test').appendChild(dv);

मैं एन्कोडेड चरित्र here मिला है।

आप लगभग » मान्य एन्कोडेड HTML होने के बारे में सही हैं। मैं केवल अनुमान लगा सकता हूं कि यह ब्राउज़र की सीमा है।

+0

जो मैं करने की कोशिश कर रहा हूं वह div.innerHTML = "» "है, जो ठीक काम करता है। हालांकि मुझे आश्चर्य है कि एक अपवाद क्यों फेंक दिया गया है क्योंकि मुझे लगता है कि एचटीएमएल इकाई मान्य है। – Arrix

+0

उपरोक्त संपादन देखें। – Laramie