如何在 JAVAScript 中使用最新可用的 XMLHttpRequest

How to use the latest available XMLHttpRequest in JScript

我使用以下命令启动 JS 脚本:C:\Windows\System32\cscript.exe /nologo //E:{16d51579-a30b-4c8b-a276-0ff4dc41e755} 为了使用最新的 Chakra 引擎。

在我的脚本中,命令 WScript.Echo( ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion() + "." + ScriptEngineBuildVersion()); 输出 11.0.19326

我知道这会提高性能,我想我也可以使用最新的 XMLHttpRequest 而不是旧的 Microsoft.XMLHTTP(我需要 responseURL)但是它看来我不是。

有解决办法吗?

我的猜测是,您加载 Chakra 引擎的方式是加载一个不可见的 IE 实例。但是 according to this MDN compatibility table 没有支持 responseURL 的 Internet Explorer 版本。

编辑:不要使用 JScript

通过大量测试,尝试将 Edge 的 Chakra 引擎加载到 Windows Script Host 中,我无法找到任何可行的排列。创建一个 htmlfile COM 对象并使用 x-ua-compatible 强制兼容,尝试对 HTA 应用程序进行同样的操作(本地和再次使用 htmlfile COM 对象),尝试创建一个 MSXML2.ServerXMLHTTP.6.0 对象,没有 Windows 我能想到的脚本宿主 hack 会暴露 XMLHttpRequest 对象的 .responseURL 属性。

最好的办法是选择一种不同的语言。在 PowerShell 中,您可以这样做:

$req = [Net.WebRequest]::Create("https://youtu.be/")
$resp = $req.GetResponse()
$resp.ResponseURI.AbsoluteURI

...这将打印

https://www.youtube.com/?feature=youtu.be

如果您需要 .responseText 的等价物,只需添加以下内容:

$reader = new-object System.IO.StreamReader $resp.GetResponseStream()
$responseText = $reader.ReadToEnd()

如果您想使用 DOM 方法解析 $responseText...

$htmlfile = new-object -COM htmlfile
$htmlfile.IHTMLDocument2_writeln($responseText)
$buttons = $htmlfile.getElementsByTagName("button")

您可以查看 original revision of this answer 以了解 的示例。