2016-03-10 69 views
0

我想在C#中運行Javascript並在C#和Javascript之間傳遞變量。使用ClearScript將變量傳遞給Javascript

看來ClearScript是目前穩定的方式來做到這一點。

我有一個JavaScript函數,它看起來是這樣的:

var b = a[0]; 
var c = a[1]; 
var d = a[2]; 
var e = a[3]; 
rtnstr = "{errmsg: 'calculation never ran'}"; 

calculation() 

function calculation() { 
    rtnstr = "{ one:'" + a+b "', " two:'" + c+d + "'}"; 
} 

我怎麼能說,在ClearScript傳遞a數組中,並獲取回rtnstr字符串。

我發現這個網址:https://clearscript.codeplex.com,它顯示瞭如何檢索一個整數數組;我需要它來檢索一個字符串。

我也需要知道如何傳入變量;這個例子並沒有表明這一點。

回答

0

請注意,我沒有在這方面的工作,並試圖使用文檔連接點。

using Microsoft.ClearScript.V8; 

public static void Main(string[] args) 
{ 
    var engine = new V8ScriptEngine(); 
    engine.AddHostObject("a", args); // it looks like a is the name of the variable that wil be used by script to refer to host object which is args in this case 

    engine.Execute(".... your javascript code ...."); 
    var returnStr = engine.Script.rtnstr; 
} 
0

我不知道你是否仍然需要這個,但我偶然發現了你的問題,並給了它一個鏡頭。

加上一個JS文件到您的解決方案:

Add a javascript file to your solution.

你的JavaScript然後添加到JavaScript文件:

var myArray = [0,1,2,3]; 
var a = myArray[0]; 
var b = myArray[1]; 
var c = myArray[2]; 
var d = myArray[3]; 
var rtnstr = "{errmsg: 'calculation never ran'}"; 

function calculation() { 
    var one = a + b; 
    var two = c + d; 
    rtnstr = "{ one:'" + one + "', two:'" + two + "'}"; 
    return rtnstr; 
} 

在你的C#代碼,然後像做了以下內容:

using System; 
using System.IO; 
using Microsoft.ClearScript.V8; 

namespace ClearScriptConsole 
{ 
    class Program 
    { 
     static void Main(string[] args) { 

      V8ScriptEngine _v8Engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging); 

      string jsFilePath = @"..\..\HelloWorld.js"; 
      string jsContents = File.ReadAllText(jsFilePath); 

      _v8Engine.Execute(jsContents); 

      var returnedVal = _v8Engine.Script.calculation(); 
      Console.WriteLine(returnedVal); 
     } 
    } 
} 

而返回的值給了我第E採用:

The result of the calculation displayed in a console window.

乾杯