2011-05-26 16 views
10

मैं FireBug Lite पर देख रहा था और देखा कि वे बाहरी स्क्रिप्ट फ़ाइल में विकल्प पास करने के लिए एक बहुत अच्छी तकनीक का उपयोग करते हैं।JSON ऑब्जेक्ट बाहरी जावास्क्रिप्ट को पास किया गया - कूल तकनीक

<script type="text/javascript" src="https://getfirebug.com/firebug-lite.js"> 
{ 
    overrideConsole: false, 
    startInNewWindow: true, 
    startOpened: true, 
    enableTrace: true 
} 
</script> 

मैं सोच रहा था कि अगर किसी को भी इस तकनीक का नाम के बारे में पता है और जहां मैं इसे या कैसे यह काम करता है के बारे में अधिक जानकारी पा सकते हैं। बहुत अच्छा लगता है। धन्यवाद!

+0

JSONP को यह समान है? http://en.m.wikipedia.org/wiki/JSONP – mason

उत्तर

4

यह एक स्वचालित परिवर्तनीय-पास-तकनीक नहीं है जैसा आप सोच सकते हैं।

सभी अपने कोड करता है सब script टैग के माध्यम से लूप जब तक वे एक है जो अपने कोड (भरी हुई एक नियमित अभिव्यक्ति (/(firebug-lite(?:-\w+)?(?:\.js|\.jgz))(?:#(.+))?$/;) को src विशेषता की तुलना द्वारा पाते हैं।

यह टैग मिल जाता है तो है, यह बस script टैग की .innerHTML हो जाता है, और यह मूल्यांकन करता है।

मुझे लगता है कि यह (बेनाम) techique के रूप में हम खोज की गारंटी तरीका है जिसके script टैग को संदर्भित करता है की जरूरत नहीं है, वास्तविक दुनिया में प्रासंगिक नहीं है हमारे लाइब्रेरी (विशेष रूप से सभी स्क्रिप्ट के लिए यह एक स्क्रिप्ट फ़ाइल में संयुक्त होने के लिए आम है आईव सर्वर)।

इसके अलावा, मुझे इस बात पर संदेह है कि यह क्रॉस-ब्राउज़र कैसे है; के रूप में यह निश्चित रूप से spec, जिसमें कहा गया है से जाना नहीं करता है:

करने के बाद कहा कि (और इसके बारे में सोचा): spec कहा गया है कि ब्राउज़र दोनों की व्याख्या नहीं करना चाहिए। हालांकि यह इस तकनीक के साथ प्रासंगिक नहीं है। ब्राउजर को दोनों को दखल देने की ज़रूरत नहीं है, क्योंकि स्क्रिप्ट की सामग्री innerHTML के माध्यम से पढ़ी जाती है (और यदि यह सामग्री में पढ़ी जाती है, तो यह किसी भी तरह से कोई नुकसान नहीं करती है)। ब्राउज़र के रूप में spec के अनुरूप है, और यूआरआई लोड करता है (जो सभी ब्राउज़रों करते हैं), कोई समस्या नहीं है! (यह जानने के अलावा कि script टैग आपकी लाइब्रेरी से संबंधित है)।

स्क्रिप्ट स्क्रिप्ट तत्व का सामग्री के भीतर या एक बाहरी फ़ाइल में परिभाषित किया जा सकता है। यदि src विशेषता सेट नहीं है, तो उपयोगकर्ता एजेंटों को तत्व की सामग्री स्क्रिप्ट के रूप में समझनी चाहिए। यदि स्रोत में यूआरआई मान है, उपयोगकर्ता एजेंटों को तत्व की सामग्री को अनदेखा करना होगा और यूआरआई के माध्यम से स्क्रिप्ट पुनर्प्राप्त करना होगा।

(यानी, दोनों की व्याख्या न करें)।

+1

https://getfirebug.com/firebug-lite.js फ़ाइल खोलें; और 'var getScriptURL' और 'var options = fileOptions.split (",");' के लिए खोजें –

+0

@Theo: 'fileOptions' "स्क्रिप्ट URL विकल्प" (http://getfirebug.com/firebuglite#ScriptURLOptions) के लिए हैं। आप मुझे 'getScriptUrl' के लिए क्या देखना चाहते हैं? – Matt

+0

@ मैट मैं तुम्हारा मतलब नहीं था, मैं आपके जवाब में जोड़ रहा था। मेरा मतलब था 'var url = getScriptURL (स्क्रिप्ट);', वह जगह है जहां आपने समझाया था। –

2
@ मैट जवाब है, और मेरी टिप्पणी को स्पष्ट करने के लिए

आगे:

var doc = Firebug.browser.document; 
var script = doc.getElementsByTagName("script")[index]; 
var url = getScriptURL(script); 
var isExternal = url && url != doc.location.href; 

try 
{ 
    if(isExternal) 
    { 
    Ajax.request({url:url, onSuccess:renderProcess, onFailure:onFailure}) 
    } 
    else 
    { 
    var src = script.innerHTML; 
    renderProcess(src) 
    } 
} 
catch(e) 
{ 
    onFailure() 
}