首页 > 解决方案 > 如何在 JScript 中使用最新可用的 XMLHttpRequest

问题描述

我使用以下命令来启动一个 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),但看起来我不是。

有解决办法吗?

标签: xmlhttprequestjscriptchakra

解决方案


我的猜测是,你加载 Chakra 引擎的方式是加载一个不可见的 IE 实例。但是根据这个 MDN 兼容性表,没有任何版本的 Internet Explorer 支持responseURL.

编辑:不要使用 JScript

通过大量测试,尝试将 Edge 的 Chakra 引擎加载到 Windows Script Host 中,我无法找到有效的排列。创建一个htmlfileCOM 对象并强制使用 兼容x-ua-compatible,尝试与 HTA 应用程序相同(本机和再次使用htmlfileCOM 对象),尝试创建一个MSXML2.ServerXMLHTTP.6.0对象,我可以想象的任何 Windows Script Host hack 都不会暴露.responseURLXMLHttpRequest 对象的属性。

最好的选择是选择一种不同的语言。在 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")

您可以查看此答案的原始修订版,以了解不起作用的示例。


推荐阅读