首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ClearScript将变量传递给Javascript

使用ClearScript将变量传递给Javascript
EN

Stack Overflow用户
提问于 2016-03-10 02:50:56
回答 3查看 3.5K关注 0票数 2

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

现在看来,ClearScript是实现这一目标的稳定方法。

我有一个类似于以下内容的JavaScript函数:

代码语言: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字符串。

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

我还需要知道如何传递变量;示例没有说明这一点。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-04 14:13:25

我迟到了一美元,但这是另一种解决办法。我正在寻找一个快速的答案,然后偶然发现它的智能感知。听起来像是在寻找ClearScript的“调用”方法:

考虑到您可能有一个JavaScript函数,如:

代码语言: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)} }}`;
};

您希望使用一个ints数组从C#调用:

代码语言:javascript
复制
var rtnstr = engine.Invoke("calculation", new int[] { 1, 2, 3, 4, 5 });

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

代码语言:javascript
复制
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)} }}`;
};

但我收到了一个例外,“方法或财产找不到”。但是,声明为全局范围中的一个简单的旧函数是可行的。

票数 3
EN

Stack Overflow用户

发布于 2016-12-05 12:05:33

我不知道你是否还需要这个,但我无意中发现了你的问题,并尝试了一下。

首先,向解决方案中添加一个JS文件:

向解决方案中添加一个javascript文件。

然后将您的javascript添加到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#代码中执行如下操作:

代码语言:javascript
复制
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);
        }
    }
}

返回的价值给了我以下信息:

在控制台窗口中显示的计算结果。

干杯

票数 4
EN

Stack Overflow用户

发布于 2016-03-10 03:41:52

请注意,我还没有做过这方面的工作,我正在尝试使用文档来连接这些点。

代码语言:javascript
复制
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;
}   
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35906689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档