【问题标题】:Passing variables to Javascript using ClearScript使用 ClearScript 将变量传递给 Javascript
【发布时间】:2016-03-10 02:50:56
【问题描述】:

我想在 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 + "'}";
}

如何在 ClearScript 中调用它,传入 a 数组并取回 rtnstr 字符串。

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

我还需要知道如何传入变量;这个例子没有显示。

【问题讨论】:

    标签: javascript clearscript


    【解决方案1】:

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

    首先在你的解决方案中添加一个 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.

    干杯

    【讨论】:

    • 确实很棒
    【解决方案2】:

    我迟到了,还差一美元,但这是另一种解决方案。在偶然发现 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)} }}`;
    };
    

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

    【讨论】:

      【解决方案3】:

      请注意,我还没有处理过这个问题,我正在尝试使用文档来连接这些点。

      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;
      }   
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-15
        • 2011-09-02
        • 2013-12-27
        • 1970-01-01
        • 1970-01-01
        • 2018-09-23
        • 2012-01-28
        相关资源
        最近更新 更多