实现IE9的JavaScript引擎(“Chakra”)的IActiveScript实例,在Quirks模式下工作。

6

通过基于CLSID "{16d51579-a30b-4c8b-a276-0ff4dc41e755}"的IActiveScript实例的创建(如此处所述),我们可以获得IE9的JavaScript引擎,该引擎在Quirks模式下工作。不幸的是,Quirks模式不支持ECMAScript 5。

有没有人知道如何创建一个在IE9标准模式下工作的“Chakra” IActiveScript实例?


我不确定这是否有效,但请查看此接口并查看它是否可以提供您想要的内容: http://msdn.microsoft.com/zh-cn/library/cc512774(v=vs.94).aspx - justin.m.chase
3个回答

2

将你的 IActiveScript 转换为 IActiveScriptProperty,然后像这样调用它的 SetProperty 方法,并传入参数 SCRIPTPROP_INVOKEVERSIONING

CComQIPtr<IActiveScriptProperty> property = jscript;
CComVariant version(SCRIPTLANGUAGEVERSION_5_8 + 1); // = 3
hr = property->SetProperty(SCRIPTPROP_INVOKEVERSIONING, nullptr, &version);

我已经尝试过,但是Array.forEach无论如何都不起作用。Microsoft JScript 11.0.16384表示对象不支持属性或方法'forEach'。源:JavaScript运行时错误 Error:0 Scode:800a01b6。 - Danil

0

以防万一有人想知道:使用“SCRIPTPROP_INVOKEVERSIONING”调用“SetProperty”的技巧仍然有效。最大支持版本现在是15(使用jscript9.dll版本11.0.16299.2107)。

它似乎支持IE中可用的任何“最近”功能,例如“let”、“const”或“Map”,但不支持Edge中支持的内容(例如“class”)。


0

我相信CLSID是16d51579-a30b-4c8b-a276-0ff4dc41e755。在这里链接上有关于Active Script和JScript接口的各种精彩信息,特别适合使用C#的人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接