通过基于CLSID "{16d51579-a30b-4c8b-a276-0ff4dc41e755}"的IActiveScript实例的创建(如此处所述),我们可以获得IE9的JavaScript引擎,该引擎在Quirks模式下工作。不幸的是,Quirks模式不支持ECMAScript 5。
有没有人知道如何创建一个在IE9标准模式下工作的“Chakra” IActiveScript实例?
通过基于CLSID "{16d51579-a30b-4c8b-a276-0ff4dc41e755}"的IActiveScript实例的创建(如此处所述),我们可以获得IE9的JavaScript引擎,该引擎在Quirks模式下工作。不幸的是,Quirks模式不支持ECMAScript 5。
有没有人知道如何创建一个在IE9标准模式下工作的“Chakra” IActiveScript实例?
将你的 IActiveScript
转换为 IActiveScriptProperty
,然后像这样调用它的 SetProperty
方法,并传入参数 SCRIPTPROP_INVOKEVERSIONING
:
CComQIPtr<IActiveScriptProperty> property = jscript;
CComVariant version(SCRIPTLANGUAGEVERSION_5_8 + 1); // = 3
hr = property->SetProperty(SCRIPTPROP_INVOKEVERSIONING, nullptr, &version);
以防万一有人想知道:使用“SCRIPTPROP_INVOKEVERSIONING”调用“SetProperty”的技巧仍然有效。最大支持版本现在是15(使用jscript9.dll版本11.0.16299.2107)。
它似乎支持IE中可用的任何“最近”功能,例如“let”、“const”或“Map”,但不支持Edge中支持的内容(例如“class”)。
我相信CLSID是16d51579-a30b-4c8b-a276-0ff4dc41e755。在这里链接上有关于Active Script和JScript接口的各种精彩信息,特别适合使用C#的人。