ClearScript is simple to use and allows me to host either V8 or Chakra. The samples on the home page show just how easy is the interop from C# to JavaScript and vice versa.
I use a simple wrapper because the only API I need is one to Evaluate small script expressions.
public interface IJavaScriptMachine : IDisposable
{
dynamic Evaluate(string expression);
}
The following implementation sets up a default environment for script execution by loading up some required scripts, like underscore.js. The scripts are embedded resources in the current assembly.
public class JavaScriptMachine : JScriptEngine,
IJavaScriptMachine
{
public JavaScriptMachine()
{
LoadDefaultScripts();
}
void LoadDefaultScripts()
{
var assembly = Assembly.GetExecutingAssembly();
foreach (var baseName in _scripts)
{
var fullName = _scriptNamePrefix + baseName;
using (var stream = assembly.GetManifestResourceStream(fullName))
using(var reader = new StreamReader(stream))
{
var contents = reader.ReadToEnd();
Execute(contents);
}
}
}
const string _scriptNamePrefix = "Foo.Namespace.";
readonly string[] _scripts = new[]
{
"underscore.js", "other.js"
};
}
For examples, check out the ClearScript documentation.
OdeToCode by K. Scott Allen