आईओएस पर क्रोम एक बाहरी जावास्क्रिप्ट फ़ाइल को शामिल करते समय XMLHttpRequest
ऑब्जेक्ट बनाने लगता है। ऐसा लगता है कि इस ऑब्जेक्ट को ग्लोबल वैरिएबल को पहचानकर्ता a
के साथ असाइन करना है, जो आपके पास पहले से मौजूद कुछ भी ओवरराइट कर रहा है।क्या मैं क्रोम को अपनी वैश्विक संपत्ति खाने से रोक सकता हूं?
टेस्ट मामला:
HTML फ़ाइल (test.html):
<!-- ... --> <script> var a = 1; // Value is not important for this demonstration </script> <script src="test.js"></script> <!-- ... -->
बाहरी JavaScript फ़ाइल (test.js):
setTimeout(function() { document.write(a); // [object XMLHttpRequest] a.onreadystatechange = function() { document.write(a.readyState); // Alternates between "1" and "4" }; }, 100);
XMLHttpRequest
बार-बार अनुरोध करता है (कहीं कहीं ... प्रॉक्सी के माध्यम से डिवाइस कनेक्शन को रूट करना और निगरानी अनुरोध कुछ भी नहीं दिखाता है) और onreadystatechange
ईवेंट हैंडलर बार-बार निष्पादित किया जाता है।
कुछ और टिप्पणियों:
- यह केवल (इसलिए
setTimeout
) - जब यह होता है पृष्ठ लोड करने के बाद कुछ समय लगता है, वहाँ भी एक
window.__gchrome_CachedRequest
संपत्ति __gchrome_CachedRequest === a
है
- यह आईओएस क्रोम के पुराने संस्करणों में ऐसा प्रतीत नहीं होता है (यह सुनिश्चित नहीं है कि यह कौन सा संस्करण पहले होता है)
क्या कोई इससे पहले इस पर आ गया है? क्या ऐसा कोई तरीका है जिससे मैं इसे रोकने से रोक सकता हूं (नोट ... मैं a
का नाम नहीं बदल सकता)? अगर कोई क्यों जानता है ऐसा करता है तो मुझे यह पता लगाना अच्छा लगेगा।
अद्यतन
मैं सिर्फ देखा है कि यह वास्तव में बहुत इनलाइन स्क्रिप्ट के साथ होता है, न कि केवल जब आप किसी बाहरी स्क्रिप्ट शामिल हैं। मैंने शुरुआत में यह ध्यान नहीं दिया क्योंकि मेरे पास setTimeout
कॉल नहीं था। तो ऐसा लगता है कि वास्तव में हमेशा पेज लोड के बाद कुछ समय होता है।
नोट - 'document.write' कॉल पृष्ठ पर आसानी से आउटपुट करने के लिए बस वहां हैं। उन्हें 'अलर्ट', या' आंतरिक HTML ', या यदि आप चाहें तो कुछ और बदलें। प्रभाव वही है। –
यह वास्तव में विचित्र व्यवहार है, जिसे मैं अपने स्थानीय पर दोहराना प्रतीत नहीं कर सकता। एक बात जो मैं अनुशंसा करता हूं वह आपके नेटवर्क के बाहर एक स्पष्ट क्रोम पर दी गई साइट का परीक्षण कर रहा है (कुछ प्लगइन्स जेएस, यानी स्काइप, और कुछ नेटवर्क प्रदाताओं के "सामान्य" कार्यकलापों को बाधित करते हैं, साथ ही साथ उनकी सामग्री भी जोड़ते हैं)। – eithed
@Eithed - मैंने इसे 3 अलग-अलग डिवाइसों पर साफ क्रोम इंस्टॉल पर परीक्षण किया है (आईफोन 3 आईओएस 5 चला रहा है, और आईपैड 2 और आईपॉड टच दोनों आईओएस 6 चला रहे हैं)। वे सभी परीक्षण उपकरण हैं जिनमें कोई अनावश्यक प्लगइन्स नहीं हैं। हालांकि, यह क्रोम के नवीनतम संस्करण (23) के साथ है। –