使用ClearScript将变量传递给Javascript

时间:2016-03-10 02:50:56

标签: javascript clearscript

我想在C#中运行Javascript并在C#和Javascript之间传递变量。

似乎ClearScript是目前稳定的方法。

我有一个看起来像这样的JavaScript函数:

this%

如何在ClearScript中调用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 + "'}"; } 数组并回取a字符串。

我找到了这个网址:https://clearscript.codeplex.com,它显示了如何检索整数数组;我需要它来检索一个字符串。

我还需要知道如何传入变量;该示例未显示。

2 个答案:

答案 0 :(得分:1)

我来晚了,缺了1美元,但这是另一种解决方法。在绊倒Intellisense之前,我一直在寻找一个快速的答案。听起来您正在寻找ClearScript的“调用”方法:

鉴于您可能具有如下JavaScript函数:

function calculation(a) {
    var b = a[0];
    var c = a[1];
    var d = a[2];
    var e = a[3];

    return `{{ one: ${(b + c)}, two: ${(d + e)} }}`;
};

您希望使用整数数组从C#调用:

var rtnstr = engine.Invoke("calculation", new int[] { 1, 2, 3, 4, 5 });

ClearScript 5.6中可能的错误:它似乎不喜欢函数变量。我最初试图将函数声明为:

const calculation = (a) => {
    var b = a[0];
    var c = a[1];
    var d = a[2];
    var e = a[3];

    return `{{ one: ${(b + c)}, two: ${(d + e)} }}`;
};

但是我收到一个异常“找不到方法或属性”。不过,在全局范围内声明为普通的旧函数还是可以的。

答案 1 :(得分: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;
}