2016-09-15 84 views

回答

1

可以使用Execute()法「解析」你的JavaScript和GetValue()方法來檢索值,然後斷言它按預期工作。

string test = " var i = 0; "; 
Jint.Engine ScrptingEngine = new Jint.Engine(); 
var result = ScrptingEngine.Execute(test).GetValue("i"); 
Assert.AreEqual(0, result); 

此外,Execute方法也將引發JavaScriptException如果JavaScript是無效的:

try 
{ 
    ScrptingEngine.Execute("xx = ss == esfx = fuct()"); 
} 
catch(JavaScriptException ex) {} 
+0

你是對的,但是Execute實際上會運行代碼,我不認爲這是個好主意。如果目前無法在不運行的情況下驗證代碼,我仍然會將此答案標記爲正確。 – Bill

+0

@YongkeBillYu驗證JavaScript而不實際運行它非常棘手,並且需要一個強大的AST解析器。我不知道jint是否支持這一點,並且我在api中的任何地方都看不到Validate方法。 –

+0

你能把我鏈接到API嗎? – Bill

0

如果添加了腳本的對象不應該運行任何代碼。

var myscript = @" 
var badFunction = function(){/* please don't run this*/ } 
badFunction();" 

new Engine().Execute("var noRun = {" + myscript + "}"); 

雖然腳本本身不會破壞對象封裝,但並不能保證。