ReferenceError: XMLHttpRequest не определен при использовании ClearScript (V8ScriptEngine) - PullRequest
0 голосов
/ 17 декабря 2018

Я вызываю метод Execute функции javascript из C #, используя V8ScriptEngine, но я получил ошибку ReferenceError: XMLHttpRequest не определен. Я установил пакеты nuget, такие как Xhook, но не могу разрешить. Пожалуйста, помогите мне разрешить это или предложить способ вызова 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 #: вызов функции javascript из c # с использованием V8ScriptEngine

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

1 Ответ

0 голосов
/ 17 декабря 2018

XMLHttpRequest является одним из веб-API , предоставляемых браузерами, тогда как ClearScript и V8 обеспечивают чистую JavaScript среду.

Если вам просто нужен способ вызова служб HTTP, вы можете указать что-то вроде System.Net.WebClient.

Если вам действительно нужен XMLHttpRequest, у вас есть несколько вариантов.Вы можете представить реализацию Windows COM:

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

Или вы можете реализовать ее на C # или другом языке .NET и выставить это.Одна такая реализация здесь .

РЕДАКТИРОВАТЬ: Рабочий образец с использованием синхронного запроса:

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"));
...