一段时间以来,我们一直在浏览器扩展 (BHO) 中使用旧的 JScript 引擎 (CLSID_JScript) 中的活动脚本,最近我们决定也支持新的 IE9 脚本引擎 (Chakra)。我们要做的一件事是使用选项向引擎添加符号以AddNamedItem
创建SCRIPTITEM_CODEONLY
我们自己的模块(命名空间)。不幸的是,我们无法让它与 Chakra 一起工作。即使是我们添加符号并立即检索其脚本调度的最简单的示例也会产生E_OUTOFMEMORY
错误。
if (SUCCEEDED(hr)) {
hr = scriptEngine->AddNamedItem(L"test", SCRIPTITEM_CODEONLY);
}
if (SUCCEEDED(hr)) {
hr = scriptEngine->GetScriptDispatch(L"test", &scriptDispatch);
}
GetScriptDispatch
调用返回错误。您可以在 Github 上查看整个示例。
我在所有方法上都设置了断点,IActiveScriptSite
唯一调用的是GetLCID
and OnStateChange
,所以不要认为站点实现是问题。
我查看了我能找到的每个示例,并尝试了我能想到的一切,包括SCRIPTSTATE_CONNECTED
手动设置引擎状态、实现它所支持的任何其他接口等。我什至尝试返回一个有效的LCID
. 似乎没有什么不同。
知道什么给出了吗?我假设这个基本示例应该在 Chakra 中工作。