我如何在 Jint 解释器中解析 javascript 代码?
How do I parse javascript code in Jint interpreter?
我想确保 javascript 代码是有效语法:
string test = " var i = 0; ";
Jint.Engine ScrptingEngine = new Jint.Engine();
bool result = ScrptingEngine.Parse(test);
您可以使用 Execute()
方法来 "parse" 您的 JavaScript 和 GetValue()
方法来检索值,然后断言它按预期工作。
string test = " var i = 0; ";
Jint.Engine ScrptingEngine = new Jint.Engine();
var result = ScrptingEngine.Execute(test).GetValue("i");
Assert.AreEqual(0, result);
此外,如果JavaScript无效,Execute
方法也会抛出一个JavaScriptException
:
try
{
ScrptingEngine.Execute("xx = ss == esfx = fuct()");
}
catch(JavaScriptException ex) {}
如果您将脚本添加到一个对象,它不应该 运行 任何代码。
var myscript = @"
var badFunction = function(){/* please don't run this*/ }
badFunction ();"
new Engine().Execute("var noRun = {" + myscript + "}");
不能保证脚本本身不会破坏对象封装。
调用 JavaScriptParser 怎么样?
Esprima.JavaScriptParser parser = new Esprima.JavaScriptParser(script);
parser.ParseScript();
当您将 Jint 添加到您的项目中时,您还会获得 Esprima 命名空间,这就是 Jint 内部使用的命名空间(如果我没看错的话)。
然后你可以抓到一个Esprima.ParserException
。
我想确保 javascript 代码是有效语法:
string test = " var i = 0; ";
Jint.Engine ScrptingEngine = new Jint.Engine();
bool result = ScrptingEngine.Parse(test);
您可以使用 Execute()
方法来 "parse" 您的 JavaScript 和 GetValue()
方法来检索值,然后断言它按预期工作。
string test = " var i = 0; ";
Jint.Engine ScrptingEngine = new Jint.Engine();
var result = ScrptingEngine.Execute(test).GetValue("i");
Assert.AreEqual(0, result);
此外,如果JavaScript无效,Execute
方法也会抛出一个JavaScriptException
:
try
{
ScrptingEngine.Execute("xx = ss == esfx = fuct()");
}
catch(JavaScriptException ex) {}
如果您将脚本添加到一个对象,它不应该 运行 任何代码。
var myscript = @"
var badFunction = function(){/* please don't run this*/ }
badFunction ();"
new Engine().Execute("var noRun = {" + myscript + "}");
不能保证脚本本身不会破坏对象封装。
调用 JavaScriptParser 怎么样?
Esprima.JavaScriptParser parser = new Esprima.JavaScriptParser(script);
parser.ParseScript();
当您将 Jint 添加到您的项目中时,您还会获得 Esprima 命名空间,这就是 Jint 内部使用的命名空间(如果我没看错的话)。
然后你可以抓到一个Esprima.ParserException
。