[javascript] जावास्क्रिप्ट फ़ाइलों को पैरामीटर पास करना


Answers

आप मनमाना विशेषताओं वाले पैरामीटर पास कर सकते हैं। यह सभी हालिया ब्राउज़रों में काम करता है।

<script type="text/javascript" data-my_var_1="some_val_1" data-my_var_2="some_val_2" src="/js/somefile.js"></script>

Somefile.js के अंदर आप इस तरह से पारित चर मूल्य प्राप्त कर सकते हैं:

........

var this_js_script = $('script[src*=somefile]'); // or better regexp to get the file name..

var my_var_1 = this_js_script.attr('data-my_var_1');   
if (typeof my_var_1 === "undefined" ) {
   var my_var_1 = 'some_default_value';
}
alert(my_var_1); // to view the variable value

var my_var_2 = this_js_script.attr('data-my_var_2');   
if (typeof my_var_2 === "undefined" ) {
   var my_var_2 = 'some_default_value';
}
alert(my_var_2); // to view the variable value

...आदि...

Question

प्रायः मेरे पास एक जावास्क्रिप्ट फ़ाइल होगी जिसका मैं उपयोग करना चाहता हूं जिसके लिए मेरे वेब पेज में कुछ चर परिभाषित किए जाने की आवश्यकता है।

तो कोड इस तरह कुछ है:

<script type="text/javascript" src="file.js"></script>
<script type="text/javascript">
   var obj1 = "somevalue";
</script>

लेकिन मैं क्या करना चाहता हूं:

<script type="text/javascript" 
     src="file.js?obj1=somevalue&obj2=someothervalue"></script>

मैंने विभिन्न तरीकों का प्रयास किया और सबसे अच्छा अभी तक क्वेरी स्ट्रिंग को पार्स करना है:

var scriptSrc = document.getElementById("myscript").src.toLowerCase();

और फिर मेरे मूल्यों की खोज करें।

मुझे आश्चर्य है कि मेरी स्ट्रिंग को पार्स करने के लिए फ़ंक्शन बनाने के बिना ऐसा करने का कोई और तरीका है या नहीं।

क्या आप सभी अन्य तरीकों को जानते हैं?




यदि आप jQuery जैसे कुछ जावास्क्रिप्ट ढांचे का उपयोग कर रहे हैं तो यह आसानी से किया जा सकता है। इस तरह,

var x = $('script:first').attr('src'); //Fetch the source in the first script tag
var params = x.split('?')[1]; //Get the params

अब आप अपने चरम पैरामीटर के रूप में विभाजित करके इन पैराम का उपयोग कर सकते हैं।

एक ही प्रक्रिया बिना किसी ढांचे के किया जा सकता है लेकिन कोड की कुछ और पंक्तियां ले लेंगे।




यह मान्य एचटीएमएल नहीं है (मुझे नहीं लगता) लेकिन ऐसा लगता है कि यदि आप अपने वेबपृष्ठ में स्क्रिप्ट टैग के लिए एक कस्टम विशेषता बनाते हैं :

<script id="myScript" myCustomAttribute="some value" ....>

फिर जावास्क्रिप्ट में कस्टम विशेषता का उपयोग करें:

var myVar = document.getElementById( "myScript" ).getAttribute( "myCustomAttribute" );

सुनिश्चित नहीं है कि यह स्क्रिप्ट स्रोत स्ट्रिंग को पार्स करने से बेहतर या बदतर है।




यह यूआरएल देखें। यह आवश्यकता के लिए पूरी तरह से काम कर रहा है।

http://feather.elektrum.org/book/src.html

लेखक के लिए बहुत बहुत धन्यवाद। त्वरित संदर्भ के लिए मैंने नीचे मुख्य तर्क चिपकाया:

var scripts = document.getElementsByTagName('script');
var myScript = scripts[ scripts.length - 1 ];

var queryString = myScript.src.replace(/^[^\?]+\??/,'');

var params = parseQuery( queryString );

function parseQuery ( query ) {
  var Params = new Object ();
  if ( ! query ) return Params; // return empty object
  var Pairs = query.split(/[;&]/);
  for ( var i = 0; i < Pairs.length; i++ ) {
    var KeyVal = Pairs[i].split('=');
    if ( ! KeyVal || KeyVal.length != 2 ) continue;
    var key = unescape( KeyVal[0] );
    var val = unescape( KeyVal[1] );
    val = val.replace(/\+/g, ' ');
    Params[key] = val;
  }
  return Params;
}



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

ध्यान रखें कि आप इन जेएस-फाइलों के किसी भी कैशिंग को खो देते हैं क्योंकि उन्हें लगातार बदल दिया जाता है।

अलविदा।




आप वैश्विक चर का उपयोग करते हैं :- डी।

इस कदर:

<script type="text/javascript">
   var obj1 = "somevalue";
   var obj2 = "someothervalue";
</script>
<script type="text/javascript" src="file.js"></script">

'File.js' में जावास्क्रिप्ट कोड बिना किसी समस्या के obj1 और obj2 तक पहुंच सकता है।

संपादित करें बस यह जोड़ना चाहते हैं कि अगर 'file.js' जांचना चाहता है कि obj1 और obj2 को भी घोषित किया गया है तो आप निम्न फ़ंक्शन का उपयोग कर सकते हैं।

function IsDefined($Name) {
    return (window[$Name] != undefined);
}

उम्मीद है की यह मदद करेगा।




Related