2010-06-16 16 views
11

मैं जेस्क्रिप्ट और डब्ल्यूएसएच का उपयोग कर कुछ सर्वर-साइड स्क्रिप्ट लिख रहा हूं। स्क्रिप्ट काफी लंबी हो रही हैं, और कुछ सामान्य कार्य और चर सामान्य लाइब्रेरी स्क्रिप्ट में बेहतर फिट होंगे जो मैंने अपने विभिन्न स्क्रिप्ट उदाहरणों में शामिल किया था।किसी अन्य से जेस्क्रिप्ट फ़ाइल का संदर्भ कैसे लें?

लेकिन, मुझे किसी अन्य से एक जेस्क्रिप्ट फ़ाइल का संदर्भ नहीं मिल रहा है। एक पल के लिए, हालांकि मैं फ़ाइल सामग्री पढ़ रहा हूं और इसे eval() पर पास कर सकता हूं। लेकिन, जैसा कि यह MSDN:

ध्यान दें कि eval स्टेटमेंट में परिभाषित नए चर या प्रकार संलग्न कार्यक्रम के लिए दृश्यमान नहीं हैं।

क्या किसी अन्य से जेस्क्रिप्ट फ़ाइल को शामिल/संदर्भित करने का कोई तरीका है?

// A object to which library functions can be attached 
var library = new Object; 
eval((new ActiveXObject("Scripting.FileSystemObject")).OpenTextFile("common_script_logic.js", 1).ReadAll()); 

// Test use of the library 
library.die("Testing library"); 

मैंने किसी चीज़ जो करने के लिए मैं अपने पुस्तकालय कार्यों संलग्न कर सकते हैं बनाने के लिए:

+0

* "ध्यान दें कि eval स्टेटमेंट में परिभाषित नए चर या प्रकार संलग्न कार्यक्रम के लिए दृश्यमान नहीं हैं।" * जहां तक ​​मैं कह सकता हूं, कम से कम WSH के लिए नहीं: http://stackoverflow.com/a/ 1 9747677/157247 –

उत्तर

7

ठीक है, मैं एक सभ्य समाधान मिल गया। इस तरह, मैं कॉलिंग स्क्रिप्ट से अपनी लाइब्रेरी में परिभाषित कोड तक पहुंच सकता हूं। सही नहीं है, लेकिन काफी स्वीकार्य है।

यह एक अधिक उचित समाधान :-)

10

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

<!-- MyJob.wsf --> 
<job id="IncludeExample"> 
    <script language="JScript" src="MyLib1.js"/> 
    <script language="JScript" src="MyLib2.js"/> 
    <script language="JScript"> 
    WScript.Echo(myLib1.foo()); 
    WScript.Echo(myLib2.bar()); 
    </script> 
</job> 
+0

महान विचार, धन्यवाद! लेकिन मुझे लगता है कि मैं समय के लिए अपने कामकाज के साथ रहूंगा। यह डब्लूएसएच फ़ाइल –

+0

की तुलना में कम परेशानी प्रतीत होता है बहुत अच्छा! अब मुझे केवल तब तक इंतजार करना है जब तक यह चालू नहीं हो रहा है। यह अभी भी डब्लूएसएच 5.7 पर चल रहा है ...: \ यह सुविधा स्पष्ट रूप से केवल 5.8 – exhuma

+1

में लागू की गई है, मुझे लगता है कि यह ध्यान दिया जाना चाहिए कि यह विजुअल स्टूडियो के बिना कुछ और जटिल है। – bshacklett

7

थॉमस के समाधान के आधार पर - यहां एक समान, लेकिन अधिक मॉड्यूलर दृष्टिकोण है। तब

/* include.js */ 
(function() { 
    var L = {/* library interface */}; 
    L.hello = function() {return "greetings!";}; 
    return L; 
}).call(); 

, बुला लिपि में:: सबसे पहले, स्क्रिप्ट कॉल करने के लिए (मेरे कोडिंग शैली बहाना)

var Fs = new ActiveXObject("Scripting.FileSystemObject"); 
var Lib = eval(Fs.OpenTextFile("include.js", 1).ReadAll()); 
WScript.echo(Lib.hello()); /* greetings! */ 

पुस्तकालय इस तरह का उत्पादन या किसी upvalues ​​पर भरोसा नहीं करते परिभाषित है, लेकिन eval पुस्तकालय में आसपास के अज्ञात-फ़ंक्शन से प्राप्त होने वाले किसी भी मूल्य को वापस कर देगा।

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

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