Jak wykonać JavaScript, który jest ciągiem znaków?Wykonaj kod JavaScript zapisany w postaci ciągu znaków
function ExecuteJavascriptString()
{
var s = "alert('hello')";
// how do I get a browser to alert('hello')?
}
Jak wykonać JavaScript, który jest ciągiem znaków?Wykonaj kod JavaScript zapisany w postaci ciągu znaków
function ExecuteJavascriptString()
{
var s = "alert('hello')";
// how do I get a browser to alert('hello')?
}
Z funkcją eval("my script here")
.
Oceni ciąg, który jest do niego przekazywany.
Ale korzystanie z eval
can be dangerous, więc należy zachować ostrożność.
Edit: annakata ma dobry punkt - Nie tylko eval
niebezpieczną, to powolny. Dzieje się tak dlatego, że kod, który ma zostać poddany ewaluacji, musi zostać przeanalizowany na miejscu, tak, że zajmie trochę zasobów obliczeniowych.
Użyj eval().
W3 Schools tour of eval. Witryna ma kilka użytecznych przykładów ewaluacji. The Mozilla documentation covers this in detail.
Prawdopodobnie będzie to get a lot of warnings dotyczące bezpiecznego korzystania z tego urządzenia. NIE zezwalaj użytkownikom na wstrzyknięcie ANYTHING do eval(), ponieważ jest to ogromny problem z zabezpieczeniami.
Będziesz także chciał wiedzieć, że eval() ma inną scope.
http://www.w3fools.com/. W3C nie ma nawet nic do powiedzenia na temat eval. Jeśli chcesz zamieścić link do czegoś oficjalnego, cel http://ecma-international.org/ecma-262/5.1/#sec-15.1.2.1 – Bergi
Nie chciałem "linkować do niczego oficjalnego, chciałem linkować do coś czytelnego - Patrząc na to, co * ty * łączysz, nie podaje żadnego wyjaśnienia, jak to jest używane, nie ma przykładów, nie ma sposobu na majsterkowanie i opisuje metodę w izolacji. Dla początkującego jest to całkowicie niewłaściwe połączenie. nie byłoby @bjorninge, czyż nie? – cgp
Specyfikacja opisuje "eval" lepiej dla mnie niż artykuł W3Schools. Coś czytelnego z dobrym wyjaśnieniem i przykładami byłoby https://developer.mozilla.org/en-US/ docs/Web/JavaScript/Reference/Global_Objects/eval. I nie, nie jestem bjorninge – Bergi
eval powinien to zrobić.
eval(s);
eval(s);
Ale może to być niebezpieczne, jeśli pacjent przyjmuje dane od użytkowników, choć przypuszczam, że w razie awarii własnej przeglądarka ów ich problem.
. Eval jest niebezpieczny po stronie serwera. Na kliencie ... nie tak bardzo. Użytkownik może po prostu wpisać javascript: someevilcode na adres przeglądarki i bum. Eval właśnie tutaj. –
@EsbenSkovPedersen Jest to zabronione przynajmniej w chrome i wymaga działania użytkownika, w przeciwieństwie do strony, która zawiera kod "eval" od użytkowników, co może na przykład pozwolić użytkownikom wykraść konta innych użytkowników, nie wiedząc, po prostu ładując stronę. – 1j01
@ 1j01 Szczerze mówiąc, mój komentarz ma pięć lat. –
eval(s);
Pamiętaj jednak, że eval jest bardzo silny i dość niebezpieczne. Lepiej mieć pewność, że skrypt, który wykonujesz, jest bezpieczny i niezmienny przez użytkowników.
W JS wszystko może zostać zmienione przez użytkownika po prostu wpisz "javascript: document.write (" Hello World ");" na prawie dowolny pasek adresu przeglądarki. – UnkwnTech
Tak, ale możesz go utrudnić, nie używając zmiennych globalnych, ukrywając swoje funkcje w zamknięciach itp. Również, unikając ewalu jak ognia =) – PatrikAkerstrand
Użyj eval jak poniżej. Eval powinien być używany z rozwagą, proste zapytanie o "eval is evil" powinno rzucić kilka wskazówek.
function ExecuteJavascriptString()
{
var s = "alert('hello')";
eval(s);
}
Dobra wskazówka na to * proste wyszukiwanie o "eval jest złe" * Dzięki! – Taptronic
Spróbuj tego:
var script = "<script type=\"text/javascript\"> content </script>";
//using jquery next
$('body').append(script);//incorporates and executes inmediatelly
Osobiście zrobił go przetestować, ale wydaje się działać.
Można go wykonać za pomocą funkcji.Przykład:
var theInstructions = "alert('Hello World'); var x = 100";
var F=new Function (theInstructions);
return(F());
, ale na koniec - czy to nie to samo co wywołanie 'var F = function() {eval (theInstructions);};'? –
tak i nie: z eval kod byłby również wykonywany, podczas gdy z Function() kod nie jest wykonywany aż do F() (użyj case? Sprawdź błąd składni, ale nie chcesz wykonać kod) – G3z
@stefan It's beatifull ... 'nowa funkcja (" alert ("Hello World"); ")()' –
Jeśli chcesz wykonać konkretne polecenia (czyli string) po określonym czasie - cmd = kodzie - przedział = opóźnienie uruchomienia
function ExecStr(cmd, InterVal) {
try {
setTimeout(function() {
var F = new Function(cmd);
return (F());
}, InterVal);
} catch (e) { }
}
//sample
ExecStr("alert(20)",500);
proszę wyjaśnić –
@SteelBrain dodać próbkę uruchomić przez ExecStr ("alert (20)", 500); –
Nie wiem, czy jest to oszustwo czy nie:
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
sprawdzone to na wielu skomplikowanych i ukrywane skryptów:
var js = "alert('Hello, World!');" // put your JS code here
var oScript = document.createElement("script");
var oScriptText = document.createTextNode(js);
oScript.appendChild(oScriptText);
document.body.appendChild(oScript);
Trochę jak co @Hossein Hajizadeh alerady powiedział, choć w sposób bardziej szczegółowy:
Jest to alternatywa dla eval()
.
Funkcja setTimeout()
jest zaprojektowana do wykonywania czegoś po interwale milisekund, a kod do wykonania ma być sformatowany jako ciąg.
To będzie działać tak:
ExecuteJavascriptString(); //Just for running it
function ExecuteJavascriptString()
{
var s = "alert('hello')";
setTimeout(s, 1);
}
1
oznacza, że będzie czekać 1 milisekundę przed wykonaniem ciąg.
Może to nie być najbardziej poprawny sposób, ale działa.
Czy ktoś chce mi wyjaśnić, dlaczego zostałem odrzucony? –
Nowa funkcja i apply() razem działa również
var a=new Function('alert(1);')
a.apply(null)
I odpowiadał podobne pytanie i mam jeszcze inny pomysł jak to osiągnąć bez użycia eval()
:
const source = "alert('test')";
const el = document.createElement("script");
el.src = URL.createObjectURL(new Blob([source], { type: 'text/javascript' }));
document.head.appendChild(el);
W kodzie powyżej w zasadzie utwórz Blob zawierający skrypt, aby utworzyć URL obiektu (reprezentacja obiektu File lub Blob w pamięci przeglądarki). Ponieważ masz właściwość src
na tagu <script>
, skrypt zostanie wykonany w taki sam sposób, jak gdyby został załadowany z dowolnego innego adresu URL.
function executeScript(source) {
var script = document.createElement("script");
script.onload = script.onerror = function(){ this.remove(); };
script.src = "data:text/plain;base64," + btoa(source);
document.body.appendChild(script);
}
executeScript("alert('Hello, World!');");
bardzo niebezpieczne i powolny - należy pogrubienie, kursywa, podkreślenie, a h1 że – annakata
Jestem wątpliwe, że to jakieś wolniejsze niż ładowanie JavaScript nigdzie indziej na stronie, który ma być analizowany jako dobrze. Jeśli jest wolniejszy, dzieje się tak dlatego, że jest wykonywany w innym zakresie, co może zmusić do tworzenia zasobów dla tego zakresu. – cgp
Jeśli powiesz, że 'eval()' jest niebezpieczne. Czy jest jakaś alternatywa? –