var foo = "function(){ alert('meee'); }";
foo();
मैंने उपर्युक्त कोशिश की है लेकिन यह काम नहीं करता है क्या उस काम को निष्पादित किए बिना निष्पादित करने का कोई अन्य तरीका है?जावास्क्रिप्ट में एक फ़ंक्शन में स्ट्रिंग बदलना (eval नहीं)
thnx
var foo = "function(){ alert('meee'); }";
foo();
मैंने उपर्युक्त कोशिश की है लेकिन यह काम नहीं करता है क्या उस काम को निष्पादित किए बिना निष्पादित करने का कोई अन्य तरीका है?जावास्क्रिप्ट में एक फ़ंक्शन में स्ट्रिंग बदलना (eval नहीं)
thnx
आप सीधे Function
निर्माता के रूप में उपयोग करना चाहते हैं एंडर्स ने कहा। सभी तर्क तार हैं। आखिरी तर्क समारोह का मुख्य भाग है, किसी भी प्रमुख तर्क समारोह के तर्कों के नाम हैं।
ऐन्डर्स 'उदाहरण से उधार लिए,
var multiply = new Function("x", "y", "return x * y");
var multiply = function (x,y) {
return x * y
}
लेखन आपके मामले में की तरह हो सकता है, आप "function(){ alert('meee'); }"
है और आप वर foo
करने के लिए एक समारोह के रूप में यह सहेजना चाहते हैं।
var fn = "function(){ alert('meee'); }";
var foo = new Function("return ("+fn+")")();
foo();
// alerts "meee"
Function
और eval
के बीच का अंतर निजी दायरे में eval
रन है, जबकि Function
वैश्विक क्षेत्र में चलाता है।
var x="haha", y="hehe";
function test() {
var x=15, y=34;
eval("alert('eval: ' + x + ', ' + y)");
new Function("alert('Func: ' + x + ', ' + y)")();
}
test();
// eval: 15, 34
// Func: haha, hehe
कंसोल में इसे चलाने के लिए कोशिश मत करो, आप एक धोखा परिणाम (शान्ति eval
का उपयोग करें) मिल जाएगा। इसे <script>
टैग में लिखकर और ब्राउज़र में लोड करना वास्तविक परिणाम देगा।
कृपया यह नहीं कि 'फ़ंक्शन' कन्स्ट्रक्टर इस फ़ंक्शन को बनाता है, वही है जिस तरह से 'eval' करता है। यह वास्तव में 'eval' का एक और रूप है, इसलिए यह सब वास्तव में' eval' शब्द का उपयोग करने से बचता है। लेकिन आप इसे 'खिड़की [(टाइपोफ [] [0]) [3] + "वैल"] ("4 + 3")' की तरह भी कर सकते हैं, जो '7' देता है। – Claudiu
मुझे दोहराना है। आप कहते हैं कि यदि आप 'eval' का उपयोग करते हैं तो आप स्क्रिप्ट इंजेक्शन से डरते हैं या आपके पासवर्ड चुरा रहे हैं। अच्छा, ** यह EVAL का उपयोग कर रहा है ** !!! यह वही बात है - मनमाने ढंग से कोड जेएस द्वारा संकलित किया जा रहा है और चलाया जा रहा है। आप क्यों चाहते हैं कि उपयोगकर्ता आपके कोड पर अपने कार्यों की आपूर्ति कर सकें? – Claudiu
मैं के बारे में पता नहीं है कि ... वहाँ शायद आप अपने आप को एक स्क्रिप्ट इंजेक्शन हमले कि एक के रूप में जावास्क्रिप्ट आसपास गुजर शामिल नहीं करता है की चपेट में किए बिना ऐसा करने के लिए कोशिश कर रहे हैं कि क्या करना है एक बेहतर तरीका है स्ट्रिंग।
होगा मुझे पता है :) मुझे इसके बारे में बहुत कुछ पता है लेकिन मुझे एक सुरक्षित की जरूरत है क्योंकि मैंने eval well के बारे में पढ़ा है मुझे यह धारणा मिली है कि आप लोगों के लिए उपयोगकर्ता नाम और पासवर्ड भी दे सकते हैं या स्वयं को सब कुछ हटा सकते हैं :) – Val
यह वास्तव में इस पर निर्भर करता है कि आपका जावास्क्रिप्ट कहां से आ रहा है? यदि यह डेटाबेस में है और कोड स्ट्रिंग्स में एकमात्र तरीका एक सुरक्षित रूप है या आप क्या हैं, तो आप शायद ठीक हैं। दूसरी तरफ, यदि आप किसी को भी अपने बैकएंड के खिलाफ मनमाने ढंग से कोड निष्पादित करने दे रहे हैं, तो आप शायद परेशानी के लिए पूछ रहे हैं। अधिकांश जावास्क्रिप्ट हमले जिनकी मैं कल्पना कर सकता हूं वे ज्यादातर आपके डेटाबेस की बजाय उपयोगकर्ता इंटरैक्शन को प्रभावित करने जा रहे हैं। आप जो भी कह रहे हैं वह शायद एक स्क्रिप्ट है जो कीस्ट्रोक लॉग करता है और उन्हें एक्सएचआर पोस्ट या इसी तरह के माध्यम से दूरस्थ साइट पर भेजता है। एक HTML तत्व आंतरिक एचटीएमएल से – vicatcu
.. – Val
MDC के अनुसार। का उपयोग करें:
var multiply = new Function("x", "y", "return x * y");
var theAnswer = multiply(7, 6);
मुझे यकीन है कि मैंने गणित के पाठ के लिए नहीं पूछा था। मैं चाहता हूं कि एक स्ट्रिंग बनाना जिसमें फ़ंक्शन के रूप में फ़ंक्शन शामिल है और उसे कॉल करें। यह eval, सुरक्षित और बहुत धीमी नहीं उपयोग कर आसान है। – Val
@ वैल, यह एक उदाहरण है कि आपको क्या उपयोग करना चाहिए, संदर्भ पृष्ठ पढ़ें। – Anders
मेरा सुझाव है कि आपको इसे फिर से पढ़ना चाहिए जहां यह गुण कहता है ...'तर्क अस्वीकृत' और 'arity deprecated' – Val
यदि आप अपनी समस्या के अनुसार अधिक विशिष्ट हो सकते हैं तो शायद इस दृष्टिकोण का एक विकल्प है जहां आपको eval का उपयोग करने की आवश्यकता नहीं है। – rfunduk
अच्छी तरह से 'फ़ंक्शन() {अलर्ट (' मी ');}' एक ऐसा पाठ है जो अब कैप्चर करने में कामयाब रहा है, मुझे फ़ंक्शन को कॉल करने की आवश्यकता है ... मुझे लगता है कि ऊपर दिया गया उदाहरण php पर काम करता है, शायद मुझे यह विचार कैसे मिला ... तो फ़ंक्शन को '