今天花了点时间做了一个简易的JS片段测试器。其实这主要是看了IronJs开源项目以后,才有了这个想法。 得益于JS在.net平台下的执行引擎IronJS的帮助,
这个测试器的实现真是不费吹灰之力。IronJS还是蛮强大的,据说能够成功编译JQuery。不过需要.net 4.0和DLR的支持,自己用无所谓了。
代码如下:
public partial class MainWindow : Window
{
IronJS.Hosting.CSharp.Context ctx = new IronJS.Hosting.CSharp.Context();
public MainWindow()
{
InitializeComponent();
SetPrint();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
try
{
textBox2.Clear();
ctx.Execute(textBox1.Text);
}
catch (Exception ex)
{
string err = ex.Message;
while (ex.InnerException!=null)
{
ex = ex.InnerException;
err += "\r\n" + ex.Message;
}
textBox2.Text = err;
}
}
void SetPrint()
{
// Effectively the same as context.CreatePrintFunction() :-)
var print = IronJS.Native.Utils.createHostFunction<Action<IronJS.BoxedValue>>(ctx.Environment,
delegate(IronJS.BoxedValue str)
{
textBox2.Text = str.ClrBoxed.ToString();
});
ctx.SetGlobal("print", print);
}
}
{
IronJS.Hosting.CSharp.Context ctx = new IronJS.Hosting.CSharp.Context();
public MainWindow()
{
InitializeComponent();
SetPrint();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
try
{
textBox2.Clear();
ctx.Execute(textBox1.Text);
}
catch (Exception ex)
{
string err = ex.Message;
while (ex.InnerException!=null)
{
ex = ex.InnerException;
err += "\r\n" + ex.Message;
}
textBox2.Text = err;
}
}
void SetPrint()
{
// Effectively the same as context.CreatePrintFunction() :-)
var print = IronJS.Native.Utils.createHostFunction<Action<IronJS.BoxedValue>>(ctx.Environment,
delegate(IronJS.BoxedValue str)
{
textBox2.Text = str.ClrBoxed.ToString();
});
ctx.SetGlobal("print", print);
}
}