我正在使用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;
答案 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"));