Entwickler-Ecke

Sonstiges (.NET) - Jacascript


3marci - Mo 30.05.11 23:14
Titel: Jacascript
Gibt es eine Möglichkeit eine Javascript-Datei (.js) in ein Projekt einzubinden?
Ich möchte dann eine die Funktionen der JS-Datei in csharp aufrufen... also ausführen.
Die Funktion der JS-Datei gibt einen String zurück den ich wieder in c# haben will (um damit zu arbeiten).


thepaine91 - Di 31.05.11 09:24

Warum sollte man sowas tun? :O
Habe aber mal Google bemüht und nach geschätzten 2 Minuten eine Lösung erhalten.


3marci - Mi 01.06.11 20:33

user profile iconthepaine91 hat folgendes geschrieben Zum zitierten Posting springen:
Warum sollte man sowas tun? :O
Habe aber mal Google bemüht und nach geschätzten 2 Minuten eine Lösung erhalten.


Da du fragst, wieso man so was tun sollte, nehme ich auch gleich mal an dass du dir die gefundenen Beiträge nicht durchgelesen hast.
Klar, "csharp javascript" bringt bei mir auch 87 Millionen Treffer, aber an der Qualität der Funde ist einfach nur schecht und dazu noch veraltet.
Ich denke man kann so ziemlich alles Googlen, warum schliessen wir das Forum nicht einfach!?
Kannst du wenigstens die Treffer linken, Google gibt nicht bei jedem das selbe aus... Danke.

@all others
Wenn jemand einen Lösungsansatz hat bitte posten, danke schön. :wink:


Trashkid2000 - Do 02.06.11 09:35

Hi,
user profile iconthepaine91 hat folgendes geschrieben Zum zitierten Posting springen:
Warum sollte man sowas tun? :O
Habe aber mal Google bemüht und nach geschätzten 2 Minuten eine Lösung erhalten.
Naja, habe auch mal geschaut, aber das Ganze ist nun wirklich nicht so einfach. Also mit 2 Minuten war es sicher nicht getan!
user profile icon3marci hat folgendes geschrieben:
Ich denke man kann so ziemlich alles Googlen, warum schliessen wir das Forum nicht einfach!?
Also bei manchen Fragen denke ich auch, dass es einfacher wäre, mal Google zu bemühen, als hier einen Thread aufzumachen. Aber nicht bei solch speziellen Fragen.

Um mal eine Seite zu nennen, die sehr hilfreich war:http://odetocode.com/code/80.aspx

Hier also der Code mit schon etwas Fehlerbehandlung. Du musst Deinem Projekt einen Verweis auf "Microsoft.JScript" hinzufügen.

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
var jsCodeProvider = new JScriptCodeProvider();
var parameters = new CompilerParameters() 
{
  GenerateInMemory = true,
  GenerateExecutable = true
};

string jsCode =
@"function SendHallo()
  {
    return 'Hallo';
  }"
;
var results = jsCodeProvider.CompileAssemblyFromSource(parameters, jsCode);
if (results.Errors.HasErrors)

  //Fehler aufgetreten
}
else if (results.Errors.HasWarnings)
{
  //Warnungen aufgetreten
}
else
{
  var assembly = results.CompiledAssembly;
  var compiledType = assembly.GetTypes().FirstOrDefault();
  if (compiledType != null)
  {
    var sendHalloMetodInfo = compiledType.GetMethod("SendHallo");
    if (sendHalloMetodInfo != null)
    {
      var instance = FormatterServices.GetUninitializedObject(compiledType);
      string returnValue = (string)sendHalloMetodInfo.Invoke(instance, new object[] { nullnull });
    }
  }
}
Achso, die Signatur der Methode wird irgendwie geändert, wie man sieht. Aus keinem Übergabeparameter werden hier zwei (deshalb das 2x null). Darauf muss geachtet werden.
Viel Spaß damit,