在使用ClearScript(V8ScriptEngine)时未定义ReferenceError:XMLHttpRequest

时间:2018-12-17 06:42:41

标签: javascript c# clearscript

我正在使用V8ScriptEngine从C#调用javascript函数的Execute方法,但出现错误ReferenceError:XMLHttpRequest未定义。我安装了诸如Xhook之类的nuget包,但无法解析。请帮助我解决此问题或建议调用api的方法javascript函数和c#使用ClearScript(v8ScriptEnigne)调用函数。

JavaScript函数:

 function Execute(paraList)
    {
    var finalUrl = "http://172.29.134.69:9006/api/Line/GetStationDefectsByStationId?stationId=1";
    var sol=get(finalUrl,function(){var resp=this.response;return resp;});
    return sol;  
    }
    function get(url, callback) {
        var xhr = new XMLHttpRequest();
        xhr.open("GET",url, true);
        xhr.send("");
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4) {          
                if (typeof callback === "function") {             
                    callback.apply(xhr);
                }
            }
        };



}

C#代码:使用V8ScriptEngine从c#调用javascript函数

V8ScriptEngine _v8Engine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDebugging);        
    _v8Engine.Execute(Script_Text);       
    _v8Engine.AddCOMType("XMLHttpRequest", "MSXML2.XMLHTTP");
    object returnedVal = _v8Engine.Script.Execute();      
    return returnedVal;

1 个答案:

答案 0 :(得分:0)

XMLHttpRequest是浏览器提供的Web APIs之一,而ClearScript和V8提供了一个纯JavaScript环境。

如果只需要一种调用HTTP服务的方法,则可以公开类似System.Net.WebClient之类的东西。

如果您确实需要XMLHttpRequest,则有两种选择。您可以公开Windows COM实现:

_v8Engine.AddCOMType("XMLHttpRequest", "MSXML2.XMLHTTP");

或者您可以用C#或另一种.NET语言实现它,并将其公开。 here是一种这样的实现。

编辑:使用同步请求的工作示例:

engine.AddCOMType("XMLHttpRequest", "MSXML2.XMLHTTP");
engine.Execute(@"
    function get(url) {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', url, false);
        xhr.send();
        if (xhr.status == 200)
            return xhr.responseText;
        throw new Error('Request failed: ' + xhr.status);
    }
");

Console.WriteLine(engine.Script.get("https://www.google.com"));