2016-03-10 119 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.

干杯