2009-06-19 23 views
12

मेरी HTML फ़ाइल में मैं के साथ जे एस से जुड़ा हुआ है:पास एसआरसी के माध्यम से जावास्क्रिप्ट को वार्स विशेषता

src="myscript.js?config=true" 

मेरी जे एस सीधे इस तरह यह वर का मूल्य पढ़ सकते हैं?

alert (config); 

यह काम नहीं करता है, और फ़ायरफ़ॉक्स त्रुटि कंसोल कहता है "कॉन्फ़िगर नहीं किया गया है"। मैं JS फ़ाइल में src विशेषता के माध्यम से पारित वर्र्स कैसे पढ़ूं? क्या यह आसान है?

उत्तर

16
<script> 
var config=true; 
</script> 
<script src="myscript.js"></script> 

आप जिस तरह से कोशिश की गई है, आप जेएस को चर नहीं पारित कर सकते हैं। एससीआरआईपीटी टैग विंडो ऑब्जेक्ट नहीं बनाता है (जिसमें एक क्वेरी स्ट्रिंग है), और यह सर्वर साइड कोड नहीं है।

+0

अच्छा विकल्प है, हालांकि यह उत्तर नहीं देता मेरे सवाल :) –

+8

हाँ, यह करता है: प्रश्न "मेरी जे एस सीधे इस तरह यह वर का मान पढ़ सकते हैं?" उत्तर है, src attr एक php (या किसी अन्य सर्वर साइड तकनीक) को इंगित कर सकते – Benjol

+0

"आप जिस तरह से आप की कोशिश की जेएस नहीं कर सकते passe चर करने के लिए" और यह पूरा। –

4

आपने यह देखा होगा, लेकिन वास्तव में जेएस फ़ाइल पहले PHP या कुछ अन्य भाषा का उपयोग कर प्रीप्रोसेस्ड सर्वर पक्ष है। सर्वर साइड कोड वैरिएबल सेट के साथ जावास्क्रिप्ट को प्रिंट/गूंज देगा। मैंने एक स्क्रिप्ट विज्ञापन सेवा पहले देखी है, और यह मुझे देखने में लग रहा है कि क्या यह सादा ओएल 'जेएस के साथ किया जा सकता है, लेकिन यह नहीं कर सकता है।

+0

यह भी है कि कैसे JSONP (http://en.wikipedia.org/wiki/JSONP#JSONP) काम करता है। आप फ़ंक्शन का नाम पास करते हैं, और सर्वर इसे शरीर में लगा देता है। –

+0

दरअसल, जेएसओएनपी को सर्वर-साइड भाषा जैसे PHP या एएसपी द्वारा नियंत्रित किया जाता है। –

5

हाँ, आप कर सकते हैं, लेकिन आप स्क्रिप्ट में सही स्क्रिप्ट फ़ाइल नाम पता करने की जरूरत:

var libFileName = 'myscript.js', 
    scripts = document.head.getElementsByTagName("script"), 
    i, j, src, parts, basePath, options = {}; 

for (i = 0; i < scripts.length; i++) { 
    src = scripts[i].src; 
    if (src.indexOf(libFileName) != -1) { 
    parts = src.split('?'); 
    basePath = parts[0].replace(libFileName, ''); 
    if (parts[1]) { 
     var opt = parts[1].split('&'); 
     for (j = opt.length-1; j >= 0; --j) { 
     var pair = opt[j].split('='); 
     options[pair[0]] = pair[1]; 
     } 
    } 
    break; 
    } 
} 

अब आप जो तर्क पारित कर दिया है एक 'विकल्प' चर है। मैंने इसका परीक्षण नहीं किया, मैंने इसे http://code.google.com/p/canvas-text/source/browse/trunk/canvas.text.js से थोड़ा बदल दिया जहां यह काम करता है।

+0

मैं एक वास्तविक दुनिया उपयोग के मामले में, जहां इस इटाय Moav के जवाब से ज्यादा फायदेमंद हो सकता है के बारे में सोच के लिए संघर्ष कर रहा हूँ। –

+2

एक स्क्रिप्ट को एकीकृत करने के लिए आसान बनाने के लिए। व्यक्तिगत रूप से मुझे किसी अन्य स्क्रिप्ट टैग में कुछ चर घोषित करने के बजाय कुछ http पैरामीटर (जो वास्तव में नहीं हैं) को पार करना आसान लगता है। –

4

आपको स्क्रिप्ट के स्रोत विशेषता को खोजने के लिए जावास्क्रिप्ट का उपयोग करने और '?' के बाद चर को पार्स करने की आवश्यकता है। Prototype.js ढांचे का उपयोग करना, यह कुछ इस तरह दिखता है:

var js = /myscript\.js(\?.*)?$/; // regex to match .js 

var jsfile = $$('head script[src]').findAll(function(s) { 
    return s.src.match(js); 
}).each(function(s) { 
    var path = s.src.replace(js, ''), 
    includes = s.src.match(/\?.*([a-z,]*)/); 
    config = (includes ? includes[1].split('='); 
    alert(config[1]); // should alert "true" ?? 
}); 

मेरे जावास्क्रिप्ट/RegEx कौशल जंग लगी हैं, लेकिन है कि आम विचार है। सीधे scriptaculous.js फ़ाइल से फिसल गया!

+0

+1 ने मुझे यह करने के लिए की धड़कन के लिए, मैं सिर्फ चिपकाया था कि :( – karim79

1

आपकी स्क्रिप्ट हालांकि अपने स्क्रिप्ट नोड का पता लगा सकती है और स्रोत विशेषता की जांच कर सकती है और जो भी जानकारी आपको पसंद करती है उसे निकालने के लिए।

var scripts = document.getElementsByTagName ('script'); 
    for (var s, i = scripts.length; i && (s = scripts[--i]);) { 
    if ((s = s.getAttribute ('src')) && (s = s.match (/^(.*)myscript.js(\?\s*(.+))?\s*/))) { 
     alert ("Parameter string : '" + s[3] + "'");  
     break; 
    } 
    } 
+1

नहीं यह स्क्रिप्ट टैग एक आईडी देने के लिए बहुत सरल होगा और उस में document.getElementById का उपयोग करें? –

+0

हाँ आप दोनों स्क्रिप्ट के लेखक हैं और वेब पेज इसे कॉल कर रहा है। मेरा कोड खंड सामान्य पुस्तकालय फ़ाइल से आया है और मैं नहीं चाहता कि इसके उपयोगकर्ताओं को बाद के मुद्दों के साथ एक आईडी का उपयोग करना पड़े, अगर इसे गलत तरीके से निर्दिष्ट किया गया हो। – HBP

0

किया जाए या नहीं इस किया जाना चाहिए, एक उचित सवाल है, लेकिन अगर आप यह करना चाहते हैं, http://feather.elektrum.org/book/src.html वास्तव में कैसे पता चलता है। स्क्रिप्ट टैग को प्रस्तुत करते समय अपने ब्राउज़र ब्लॉक मानते हैं (वर्तमान में सत्य है, लेकिन भविष्य का सबूत नहीं हो सकता है), प्रश्न में लिपि हमेशा उस बिंदु तक पृष्ठ पर आखिरी लिपि है।

फिर jQuery और http://plugins.jquery.com/project/parseQuery जैसे कुछ ढांचे और प्लगइन का उपयोग करके यह बहुत छोटा हो जाता है। आश्चर्य की बात है कि इसके लिए अभी तक कोई प्लगइन नहीं है।

कुछ हद तक संबंधित जॉन Resig के अपमानजनक स्क्रिप्ट टैग है, लेकिन उस बाहरी स्क्रिप्ट के बाद कोड चलाता है, नहीं आरंभीकरण के हिस्से के रूप: http://ejohn.org/blog/degrading-script-tags/

क्रेडिट: Passing parameters to JavaScript files, Passing parameters to JavaScript files

0

वैश्विक चर का उपयोग करना एक ऐसा नहीं है स्वच्छ या सुरक्षित समाधान है, बजाय आप डेटा एक्स विशेषताओं का उपयोग कर सकते हैं, यह स्वच्छ और सुरक्षित है:

<script type="text/javascript" data-parameter_1="value_1" ... src="/js/myfile.js"></script> 

myFile से।js आप jQuery के साथ उदाहरण के लिए, डेटा मानकों का उपयोग कर सकते हैं:

var parameter1 = $('script[src*="myfile.js"]').data('parameter_1'); 

जाहिर है "myfile.is" और "parameter_1" 2 स्रोतों में मैच के लिए है;)

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