使用 ClearScript 将变量传递给 Javascript
Passing variables to Javascript using ClearScript
我想在 C# 中 运行 Javascript 并在 C# 和 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 + "'}";
}
我如何在传递 a
数组并取回 rtnstr
字符串的 ClearScript 中调用它。
我找到了这个 URL:https://clearscript.codeplex.com,它展示了如何检索整数数组;我需要它来检索一个字符串。
我还需要知道如何传入变量;该示例未显示。
请注意,我还没有处理过这个问题,我正在尝试使用文档将这些点联系起来。
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;
}
我不知道你是否还需要这个,但我偶然发现了你的问题并试了一下。
首先将 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);
}
}
}
返回值给了我以下内容:
The result of the calculation displayed in a console window.
干杯
我来晚了,还缺一美元,但这是另一种解决方案。在偶然发现 Intellisense 之前,我一直在寻找快速答案。听起来您正在寻找 ClearScript 的 "Invoke" 方法:
鉴于您可能有一个 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)} }}`;
};
但是我收到了一个异常 "Method or property not found"。虽然在全局范围内声明为一个普通的旧函数仍然有效。
我想在 C# 中 运行 Javascript 并在 C# 和 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 + "'}";
}
我如何在传递 a
数组并取回 rtnstr
字符串的 ClearScript 中调用它。
我找到了这个 URL:https://clearscript.codeplex.com,它展示了如何检索整数数组;我需要它来检索一个字符串。
我还需要知道如何传入变量;该示例未显示。
请注意,我还没有处理过这个问题,我正在尝试使用文档将这些点联系起来。
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;
}
我不知道你是否还需要这个,但我偶然发现了你的问题并试了一下。
首先将 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);
}
}
}
返回值给了我以下内容:
The result of the calculation displayed in a console window.
干杯
我来晚了,还缺一美元,但这是另一种解决方案。在偶然发现 Intellisense 之前,我一直在寻找快速答案。听起来您正在寻找 ClearScript 的 "Invoke" 方法:
鉴于您可能有一个 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)} }}`;
};
但是我收到了一个异常 "Method or property not found"。虽然在全局范围内声明为一个普通的旧函数仍然有效。