使用Jint / Trap console.log调用从C#运行javascript

时间:2012-11-26 01:07:51

标签: c# javascript debugging jint

我正在使用JINT将javascript文件加载到一个小型C#应用程序中,并使用C#中的一些参数调用许多方法。我想获得这些方法的返回值。这就是我正在做的事情:

        JintEngine engine = new JintEngine();
        string file = File.ReadAllText(@"C:\thejavascript.js");
        engine.Run(file);            
        Console.WriteLine(engine.CallFunction("themethod")); 

javascript方法如下:

        function themethod() {   
            console.log("Hello!");
                return "Finished";
        }

当我运行上面的代码时,我可以在VisualStudio控制台中看到'已完成',但调用发送'Hello!'无法看到AS3控制台。它甚至不在flashlog.txt文件中。事实上,我认为JINT会抛出错误,因为可能不存在“控制台”对象,因为没有浏览器。

如何从JINT中运行的javascript中捕获发送到控制台的内容? JINT下载站点上有一个有SystemConsole'或者其他东西(不是System.Console)的例子,但是我还没有成功地使用它。我希望能够将调试代码添加到javascript中,并在VisualStudio的控制台中查看它。

有什么想法吗?这使调试我正在做的非常困难。 。

提前致谢。

1 个答案:

答案 0 :(得分:2)

在C#中:

        JintEngine engine = new JintEngine();
        engine.SetFunction("__log", new Action<object>(Console.WriteLine));
        var billy = engine.CallFunction("testMethod"); 

在Javascript中:

var customConsole= {};

customConsole.__log = function(args){ var toCall = '';
for(var i = 0, l = arguments.length; i <l; i++){ toCall += arguments[i] + ' '; }
__log(toCall);};

function testMethod() {         
    customConsole.__log("Log this. . .");
}