11

मुझे आईई 8 में bestbuy.com पर एक बग मिला और मुझे यह समझ में नहीं आता कि ऐसा क्यों होता है। यह IE74 में comcast.com और raymourflanigan.com जैसी साइटों पर भी होता है, लेकिन google.com या godaddy.com पर नहीं।बेस्टब्यू की वेबसाइट पर इंटरनेट एक्सप्लोरर 8 में बहुत अजीब कोने-केस व्यवहार

निम्नलिखित कोड एक "Invalid procedure call or argument" त्रुटि (विशेष रूप से अंतिम पंक्ति क्या त्रुटि फेंकता है) फेंकता है:

var p = document.createElement("p"); 
var holder = Element.prototype.appendChild; 
holder.apply(document.body, [p]); 

यह बहुत ही अजीब है क्योंकि मैं IE8 में अन्य वेबसाइटों में यह कोशिश की है और यह एक तरह काम करता है आकर्षण। मैंने का उपयोग .apply के बजाय appendChild विधि को Element प्रोटोटाइप पर किसी अन्य चर के संदर्भ में संग्रहीत करने का प्रयास किया, लेकिन इन दोनों प्रयासों ने एक ही त्रुटि को फेंक दिया।

इसका कारण क्या है?

+0

मेरे लिए यह कंसोल में किसी भी मुद्दे के बिना bestbuy वेबसाइट पर काम किया। हालांकि यह IE8 में IE8 नहीं बल्कि IE8 मोड नहीं है। –

+0

@ टॉमसकिर्डा हाँ, इसे वीएम के साथ आईई 8 में आज़माएं और अगर यह काम करता है तो मुझे बताएं। –

+0

प्रश्न को स्कर्ट करने के लिए खेद है, लेकिन मुझे समझ में नहीं आता कि आप दस्तावेज़.body.appendChild (पी) का उपयोग क्यों नहीं कर रहे हैं; – 1nfiniti

उत्तर

9

संपादित

"कोड किस तरह का संभवतः इस त्रुटि का कारण सकता है?"

ऐसा लगता है कि त्रुटि document.body से संबंधित है जो पृष्ठ के सख्त मोड में होने के परिणामस्वरूप उपलब्ध नहीं है। मोड के निर्देश के परिणामस्वरूप BestBuy पर दर्ज किया गया है:

<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> 
के साथ इंटरनेट एक्सप्लोरर के संबंध

, विकल्प chrome=1 एक Google Content Frame (GCF) कठोर मोड में संचालित करने के लिए पेज के लिए बाध्य करेगा बनाता है। comcast.com XHTML का उपयोग कर अपने डॉक्टरेट हेडर के परिणामस्वरूप सख्त मोड में है।

There are various ways to enter document modes in IE

पेज कठोर मोड में होने का शुद्ध परिणाम है कि प्रतिपादन सतह document.documentElement पर उपलब्ध हो जाता है।

var p = document.createElement("p"); 
p.innerHTML = "APPEND"; 
var holder = Element.prototype.appendChild; 
holder.apply(document.documentElement, [p]); 

मैं इस व्यवहार का परीक्षण करने के लिए इस बेला बनाया:: इस कोड देखने के क्षेत्र के तल पर पाठ और एक पैरा में संलग्न कर देगा http://jsfiddle.net/LAkQk/

मैं पहली बार में इस व्यवहार को परीक्षण करने का फैसला एकाधिक ब्राउज़रों।

क्रोम, फ़ायरफ़ॉक्स, सफारी और आईई 8 में त्रुटि के बिना चलता है।

ध्यान दें कि यानी 8 पर इस पहेली (या वास्तव में) का परीक्षण करने के लिए आपको /embedded का उपयोग करना होगा और फिर "परिणाम" पर क्लिक करना होगा।

तो आइए स्वीकृति के साथ शुरू करें कि उन साइटों पर कुछ ऐसा है जो संघर्ष कर रहे हैं।


मैं bestbuy.com पर IE8 का उपयोग कर त्रुटि को दोहराने के लिए, और है कि यह google.com

हालांकि पर काम किया है इस बात की पुष्टि करने में सक्षम था, इस नहींapply या appendChild प्रति के साथ एक मुद्दा है का कहना है।यह document.body पास करने के साथ विशेष रूप से एक मुद्दा है। आप bestbuy.com पर इस कोड के साथ इस खुद के परीक्षण कर सकते हैं:

(function(){ 
var p = document.createElement("p"); 
p.innerHTML = "APPEND"; 
var holder = Element.prototype.appendChild; 
var d = document.getElementById("header"); 
holder.apply(d, [p]); 
})() 

शायद यह उनके प्लगइन्स में से एक का एक परिणाम के रूप में शरीर से जुड़ी कुछ की वजह से है। Amusingly, इस bestbuy.com

$("body").append('<p>Append!</p>'); 

पर यानी कंसोल से काम करता है मैं प्लग इन की संख्या के माध्यम से देखा और जो अधिभार या संघर्ष खड़ी कर रहा है कोड का सटीक लाइन नहीं मिल सकता है, लेकिन यह वहाँ होना चाहिए, और अधिक उपयोगकर्ता एजेंट को सूँघने के परिणामस्वरूप संभवतः।

+0

दिलचस्प। यह नहीं पता था कि यह 'document.body' के लिए विशिष्ट था। इस त्रुटि का कारण किस प्रकार का कोड संभवतः हो सकता है? क्या आप त्रुटि के आसपास किसी भी तरह से सोच सकते हैं (जबकि अभी भी 'document.body' का उपयोग करने में सक्षम हैं)? –

+0

@JustinMeltzer - मुझे नहीं पता था कि कौन सा कोड कारण था। शायद फ़ंक्शन कॉल का एक अवरोध था, शायद किसी आइफ्रेम को किसी भी तरह से रोकथाम उपकरण (असंभव) के रूप में उपयोग किया जाता था, या शायद 'बॉडी' विशेष रूप से कुछ प्रकार के कस्टम कार्यान्वयन के लिए अधिभारित होता है। –

+0

@JustinMeltzer - अधिक जानकारी के लिए संपादित देखें। –

1

डीबगर का कहना है कि "तत्व 'को ट्रैविस कोड के लिए अपरिभाषित किया गया है और जब मैं पृष्ठ लोड करता हूं तो मुझे प्राप्त एकमात्र जेएस अपवाद यह है कि' हैसएट्रिब्यूट 'एक समर्थित विधि नहीं है। दोनों ही तभी होते हैं जब IE8 पृष्ठ को संगतता मोड (दस्तावेज़ मोड: आई 7 मानक) में लोड करता है, लेकिन शायद मैं आपके से एक अलग पृष्ठ लोड करता हूं: आपका कोड एलिमेंट का उपयोग करता है, इसलिए अपवाद ट्रैविस कोड के समान होगा।

What's IE take on HTMLDocument and HTMLElement

IE7 में कोई 'तत्व' नहीं है: और यहाँ जवाब है।

संबंधित मुद्दे