Как использовать последний доступный XMLHttpRequest в JScript - PullRequest
1 голос
/ 02 мая 2019

Я использую следующую команду для запуска JS-скрипта: C:\Windows\System32\cscript.exe /nologo //E:{16d51579-a30b-4c8b-a276-0ff4dc41e755} для использования новейшего движка чакры.

В моем скрипте команда WScript.Echo( ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion() + "." + ScriptEngineBuildVersion()); выводит 11.0.19326.

Я знаю, что это увеличивает производительность, и я подумал, что смогу также использовать последнюю XMLHttpRequest вместо старой Microsoft.XMLHTTP (мне нужно responseURL ), но похоже, что я нет.

Есть ли решение?

1 Ответ

1 голос
/ 06 мая 2019

Я предполагаю, что при загрузке движка Chakra он загружает невидимый экземпляр IE. Но согласно этой таблице совместимости MDN не существует версии Internet Explorer, которая поддерживает responseURL.

edit: не использовать JScript

После многочисленных испытаний, пытаясь загрузить движок Edge's Chakra в Windows Script Host, я не получаю никакой перестановки, которая работает. Создание htmlfile COM-объекта и форсирование совместимости с использованием x-ua-compatible, попытки сделать то же самое с приложением HTA (как исходно, так и снова с htmlfile COM-объектом), попытка создать объект MSXML2.ServerXMLHTTP.6.0, без взлома Windows Script Host Я могу себе представить, что предоставит свойство .responseURL объекта XMLHttpRequest.

Лучше всего выбрать другой язык. В 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()

Если вы хотите проанализировать $ responseText с использованием методов DOM ...

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

Вы можете увидеть оригинальную версию этого ответа для примера того, что не работает.

...