# Monday, August 27, 2007
« Firefox Add-on NoScript | Main | Foxit Reader für den Adobe Acrobat ... »

JavaScript ist eine dynamische Sprache. Der Code wird nicht kompiliert sondern zur Laufzeit interpretiert. Dadurch wird unter anderem die eval Funktion ermöglicht, die innerhalb eines Skripts einfach JavaScript Code als Parameter entgegen nimmt und ausführt.

Im .NET Framework gibt (gab) es eine Variante von JavaScript: JScript. Damit sollte es möglich sein, aus einem C# Programm heraus diese JScript Funktion aufzurufen. Und tatsächlich ist dies sogar sehr einfach möglich. Man muss sich nur darüber im klaren sein, dass das nur eine Übergangslösung ist.

Aus MSDN VsaEngine:

Use of this type is not recommended because it is being deprecated in Visual Studio 2005; there will be no replacement for this feature. Please see the ICodeCompiler documentation for additional help.

In .NET 3.0 ist es damit bereits Schluss. In Zukunft wird wohl eher die Dynamic Language Runtime DLR dafür verwendet.

Das hilft mir aber jetzt nichts. Die einfachste Lösung habe ich in einem Kommentar zu einem Blog-Eintrag von Rick Strahl gefunden: Evaluating JavaScript code from C#

Man erzeugt sich eine JScript Dll:

  1. Mit Notepad eine Datei mit folgendem Text erzeugen:
    class EvalClass { function Evaluate(expression: String) { return eval(expression, "unsafe"); } }
  2. Die Datei als C:\MyEval.js speichern.
  3. Einen VS2005 Command Prompt (Start, Programs, VS2005, VS2005 Tools) öffnen.
  4. Auf C:\ wechseln.
  5. Folgenden Befehl absetzen:
    jsc /t:library C:\MyEval.js
  6. Es wird eine neue Datei mit dem Namen MyEval.dll erzeugt.
  7. MyEval.dll in das gewünschte C# Projekt kopieren und referenzieren. Zusätzlich muss noch Microsoft.Jscript.dll referenziert werden.
  8. So kann jetzt die JavaScript Eval Funktion aufgerufen werden:
    EvalClass evalClass = new EvalClass();
    object result = evalClass.Evaluate("2+3");

 

Das  funktioniert wirklich so einfach und gut. Was ich später noch ändern musste, war der zusätzlich String Parameter "unsafe" bei der JScript eval Funktion. Ohne diesen Parameter gibt es eine Security Exception, wenn der übergebene JavaScript Code eine neue Funktion deklariert.

Comments are closed.