जवाबों:
eval("my script here")फ़ंक्शन के साथ ।
आप एक फ़ंक्शन का उपयोग करके इसे निष्पादित कर सकते हैं। उदाहरण:
var theInstructions = "alert('Hello World'); var x = 100";
var F=new Function (theInstructions);
return(F());
var F=function(){eval(theInstructions);};?
new Function("alert('Hello World');")()
evalसमारोह एक स्ट्रिंग है कि यह करने के लिए पारित हो जाता है का मूल्यांकन करेंगे।
लेकिन इसका इस्तेमाल evalखतरनाक हो सकता है , इसलिए सावधानी के साथ उपयोग करें।
संपादित करें: annakata में एक अच्छा बिंदु है - न केवल eval खतरनाक है , यह धीमा है । इसका कारण यह है कि मूल्यांकन किए जाने वाले कोड को मौके पर पार्स किया जाना चाहिए, ताकि कुछ कंप्यूटिंग संसाधनों को ले जाएगा।
eval()कि खतरनाक है। क्या कोई विकल्प है?
Eval () का उपयोग करें।
Eval की डब्ल्यू 3 स्कूलों के दौरे । साइट के कुछ उदाहरण हैं।मोज़िला प्रलेखन में इस पर विस्तार से चर्चा की गई है।
आपको संभवतः इसे सुरक्षित रूप से उपयोग करने के बारे में बहुत सारी चेतावनी मिलेगी । उपयोगकर्ताओं को कुछ भी निकालने के लिए अनुमति नहीं दें () क्योंकि यह एक बड़ा सुरक्षा मुद्दा है।
आप यह भी जानना चाहेंगे कि eval () का एक अलग क्षेत्र है ।
evalमुझे उस W3Schools लेख से बेहतर बताती है। अच्छी व्याख्या और उदाहरणों के साथ कुछ पठनीय होगा । developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… । और नहीं, मैं bjorninge नहीं हूँ
इसे इस्तेमाल करे:
var script = "<script type='text/javascript'> content </script>";
//using jquery next
$('body').append(script);//incorporates and executes inmediatelly
व्यक्तिगत रूप से, मैंने इसका परीक्षण नहीं किया, लेकिन काम करने के लिए लगता है।
थोड़ा सा जो @ हसीं हाजीजादेह अलरदी ने कहा, हालांकि अधिक विस्तार से:
के लिए एक विकल्प है eval() ।
कार्यक्रम setTimeout() को मिलीसेकेंड के अंतराल के बाद कुछ निष्पादित करने के लिए डिज़ाइन किया गया है, और कोड को निष्पादित करने के लिए बस एक स्ट्रिंग के रूप में स्वरूपित किया जाना होता है।
यह इस तरह काम करेगा:
ExecuteJavascriptString(); //Just for running it
function ExecuteJavascriptString()
{
var s = "alert('hello')";
setTimeout(s, 1);
}
1 इसका मतलब है कि यह स्ट्रिंग निष्पादित करने से पहले 1 मिलीसेकंड इंतजार करेगा।
यह करने के लिए सबसे सही तरीका नहीं हो सकता है, लेकिन यह काम करता है।
setTimeout? ध्यान दें कि किसी भी स्थिति में यह निष्पादन को अतुल्यकालिक बना देगा। इसका अर्थ है कि setTimeoutकॉल का अनुसरण करने वाले सभी कोड को पास करने से पहले ही कॉल किया जाएगा setTimeout(भले ही 0 (शून्य) के साथ कहा जाए)।
नीचे के रूप में eval का उपयोग करें । Eval का उपयोग सावधानी के साथ किया जाना चाहिए, " eval is बुराई " के बारे में एक सरल खोज कुछ संकेत फेंकनी चाहिए।
function ExecuteJavascriptString()
{
var s = "alert('hello')";
eval(s);
}
यदि आप किसी विशिष्ट समय के बाद किसी विशिष्ट कमांड (यानी स्ट्रिंग) को निष्पादित करना चाहते हैं - cmd = अपना कोड - InterVal = चलाने में देरी
function ExecStr(cmd, InterVal) {
try {
setTimeout(function () {
var F = new Function(cmd);
return (F());
}, InterVal);
} catch (e) { }
}
//sample
ExecStr("alert(20)",500);
Valमें InterValपूंजीकृत?
उन उपयोगकर्ताओं के लिए जो नोड का उपयोग कर रहे हैं और जो eval()नोडज ऑफ़र के संदर्भ निहितार्थ से चिंतित हैं vm। यह एक V8 वर्चुअल मशीन बनाता है जो एक अलग संदर्भ में आपके कोड के निष्पादन को सैंडबॉक्स कर सकता है।
चीजों को एक कदम आगे ले जाना, vm2जो vmवीएम को अविश्वास कोड को चलाने की अनुमति देता है।
https://nodejs.org/api/vm.html - आधिकारिक नोडज / वीएम
https://github.com/patriksimek/vm2 - विस्तारित vm2
const vm = require('vm');
const x = 1;
const sandbox = { x: 2 };
vm.createContext(sandbox); // Contextify the sandbox.
const code = 'x += 40; var y = 17;';
// `x` and `y` are global variables in the sandboxed environment.
// Initially, x has the value 2 because that is the value of sandbox.x.
vm.runInContext(code, sandbox);
console.log(sandbox.x); // 42
console.log(sandbox.y); // 17
console.log(x); // 1; y is not defined.
eval(s);
लेकिन यह खतरनाक हो सकता है यदि आप उपयोगकर्ताओं से डेटा ले रहे हैं, हालांकि मुझे लगता है कि अगर वे अपने स्वयं के ब्राउज़र को क्रैश करते हैं तो यह उनकी समस्या है।
evalसे उपयोगकर्ताओं के कोड का विरोध किया जाता है , जो उदाहरण के लिए उपयोगकर्ताओं को उनके पेज को लोड किए बिना केवल जानने के बिना अन्य उपयोगकर्ता के खाते चोरी कर सकता है।
यकीन नहीं होता कि यह धोखा है या नहीं:
window.say = function(a) { alert(a); };
var a = "say('hello')";
var p = /^([^(]*)\('([^']*)'\).*$/; // ["say('hello')","say","hello"]
var fn = window[p.exec(a)[1]]; // get function reference by name
if( typeof(fn) === "function")
fn.apply(null, [p.exec(a)[2]]); // call it with params
नया कार्य और लागू () एक साथ भी काम करता है
var a=new Function('alert(1);')
a.apply(null)
eval()। developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
मैं इसी तरह के सवाल का जवाब दे रहा था और एक और विचार आया कि इसे बिना उपयोग के कैसे हासिल किया जाए eval():
const source = "alert('test')";
const el = document.createElement("script");
el.src = URL.createObjectURL(new Blob([source], { type: 'text/javascript' }));
document.head.appendChild(el);
ऊपर दिए गए कोड में आप मूल रूप से ऑब्जेक्ट स्क्रिप्ट (फ़ाइल या ब्लॉब ऑब्जेक्ट का ब्राउज़र मेमोरी में प्रतिनिधित्व) बनाने के लिए, अपनी स्क्रिप्ट युक्त ब्लॉब बनाते हैं। चूंकि आपके पास टैग srcपर संपत्ति है <script>, लिपि को उसी तरह निष्पादित किया जाएगा जैसे कि इसे किसी अन्य URL से लोड किया गया था।
eval करना चाहिए।
eval(s);
eval(s);
हालांकि, याद रखें कि यह बहुत शक्तिशाली है और काफी असुरक्षित है। आपको बेहतर विश्वास है कि आपके द्वारा निष्पादित की जा रही स्क्रिप्ट उपयोगकर्ताओं द्वारा सुरक्षित और अप्राप्य है।
एक गणित का उपयोग कर सकते हैं
उपरोक्त लिंक से स्निपेट:
// evaluate expressions
math.evaluate('sqrt(3^2 + 4^2)') // 5
math.evaluate('sqrt(-4)') // 2i
math.evaluate('2 inch to cm') // 5.08 cm
math.evaluate('cos(45 deg)') // 0.7071067811865476
// provide a scope
let scope = {
a: 3,
b: 4
}
math.evaluate('a * b', scope) // 12
math.evaluate('c = 2.3 + 4.5', scope) // 6.8
scope.c
scopeकोई भी वस्तु है इसलिए यदि आप एवलाट फ़ंक्शन के लिए वैश्विक स्कोप पास करते हैं, तो आप गतिशील रूप से अलर्ट () को निष्पादित करने में सक्षम हो सकते हैं।
मैथज भी eval () की तुलना में बहुत बेहतर विकल्प है क्योंकि यह सैंडबॉक्स में चलता है।
एक उपयोगकर्ता अभिव्यक्ति पार्सर के माध्यम से दुर्भावनापूर्ण जावास्क्रिप्ट कोड को इंजेक्ट करने की कोशिश कर सकता है। मैथज के अभिव्यक्ति पार्सर एक सैंडबॉक्स वाले वातावरण को अभिव्यक्तियों को निष्पादित करने के लिए प्रदान करते हैं जो इसे असंभव बनाना चाहिए। हालांकि यह संभव है कि अज्ञात सुरक्षा कमजोरियां हैं, इसलिए सावधान रहना महत्वपूर्ण है, खासकर जब सर्वर साइड को मनमाने ढंग से अभिव्यक्ति के निष्पादन की अनुमति देता है।
मैथज के नए संस्करण इवेल () या फंक्शन () का उपयोग नहीं करते हैं।
पार्सर सक्रिय रूप से JavaScripts आंतरिक निष्कासन और नए फ़ंक्शन तक पहुंच को रोकता है जो सुरक्षा हमलों का मुख्य कारण हैं। Mathjs के संस्करण 4 और नए में हूड के तहत जावास्क्रिप्ट के उपयोग का उपयोग नहीं किया गया है। संस्करण 3 और पुराने ने संकलन चरण के लिए eval का उपयोग किया। यह सीधे सुरक्षा का मुद्दा नहीं है, बल्कि एक बड़े संभावित हमले की सतह पर परिणाम देता है।
दोनों का उपयोग करना और जावास्क्रिप्ट को निष्पादित करने के लिए एक नया फ़ंक्शन बनाना सुरक्षा जोखिमों के साथ आता है।
const script = document.createElement("script");
const stringJquery = '$("#button").on("click", function() {console.log("hit")})';
script.text = stringJquery;
document.body.appendChild(script);
मैं एक स्ट्रिंग के रूप में प्राप्त जावास्क्रिप्ट को निष्पादित करने के लिए इस पद्धति को पसंद करता हूं।