2016-02-25 8 views
6

यहाँ में ढूँढना currentScript एक नमूना कोड है:एचटीएमएल

एचटीएमएल

<script> alert('This is alert!') </script> 

जे एस

window.alert = function(data) //alert() over-riding 
{ 
    scriptObject = document.currentScript; //gives me <script> object 
} 

अद्यतन: ऊपर कोड प्रतीत नहीं होता है अभी काम करें (यह इंटरनेट एक्सप्लोरर 11.420.10586.0 में पहले, compatibility removed for IE) काम करता था। क्रोम, फ़ायरफ़ॉक्स, सफारी और माइक्रोसॉफ्ट एज में स्क्रिप्ट ऑब्जेक्ट क्यों ढूंढ पा रहा है, लेकिन इंटरनेट एक्सप्लोरर में नहीं? क्या कोई वैकल्पिक तरीका है?


मुद्दा:

एचटीएमएल

<script> ReferenceError.prototype.__defineGetter__('name', function fff() { javascript:alert(1) }),x </script> 

जे एस

window.alert = function(data) //alert() over-riding 
{ 
    scriptObject = ? // I need to get the Script object 
} 

मैं arguments.callee.caller की कोशिश की पंख डी fff(), लेकिन स्क्रिप्ट ऑब्जेक्ट को पकड़ने में असमर्थ।

अलर्ट() उपर्युक्त स्क्रिप्ट के लिए क्रोम में निष्पादित नहीं होता है। इसके बजाए फ़ायरफ़ॉक्स का प्रयोग करें। मुझे किसी भी ब्राउज़र में स्क्रिप्ट ऑब्जेक्ट नहीं मिला।

कोई समाधान कृपया?

+1

https://developer.mozilla.org/एन-यूएस/डॉक्स/वेब/एपीआई/दस्तावेज़/वर्तमान स्क्रिप्ट # ब्राउज़र_कंपीबिलिटी <- समर्थन तालिका को देखें, संदेह है कि यह पहले आईई 11 में काम करता था। – epascarello

+0

ओह। आईई आंतरिक रूप से अद्यतन हो गया है, हो सकता है। क्या आईई के लिए कोई वैकल्पिक तरीका है? –

उत्तर

1

सरलतम परिदृश्य है जब आपके ओवरराइड alert में (अवरुद्ध) स्क्रिप्ट तुरंत शुरू हो जाती है में, सरल document.scripts[document.scripts.length-1] जाना अच्छा हो सकता है:

<pre id="log"></pre> 
 

 

 
<script> 
 
window.alert = function(a){ 
 
log.innerText += a + ' ' + document.scripts[document.scripts.length-1].outerHTML + '\n'; 
 
} 
 
</script> 
 

 
<script id="a">alert('first')</script> 
 

 
<script id="b">alert('second')</script> 
 

 
<script id="c">alert('third')</script>

+0

यह आईई में काम करता है। लेकिन, यदि बहुत सारी स्क्रिप्ट हैं, तो कहें, आपके उदाहरण में, कुछ 100 स्क्रिप्ट लगातार, क्या यह निर्धारक होगी? मेरा मतलब है 'लॉग' में डेटा का क्रम। साथ ही, कृपया दूसरे भाग मुद्दे 'ReferenceError' अलर्ट पर एक नज़र डालें। –

+1

जब तक उन स्क्रिप्ट स्थिर होंगी (दस्तावेज पेड़ में अंतिम स्क्रिप्ट के रूप में भार के बाद गतिशील रूप से डाली नहीं गई) और तुल्यकालिक (async नहीं), हां, यह निश्चित रूप से कार्य करने के लिए निर्धारक और गारंटीकृत होना चाहिए: एकल-थ्रेड प्रकृति से JavaSript का। (मुझे एसिंक टीबीएच के बारे में निश्चित नहीं है।) – myf

+0

यह इसे मंजूरी दे दी। धन्यवाद। दूसरे भाग 'संदर्भ त्रुटि' चेतावनी के बारे में कोई विचार? –