【发布时间】:2013-07-04 14:18:55
【问题描述】:
一段时间以来,我们一直在浏览器扩展 (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 调用返回错误。你可以看到整个例子on Github。
我在所有IActiveScriptSite 方法上都设置了断点,唯一被调用的是GetLCID 和OnStateChange,所以不要认为站点实现是问题所在。
我查看了我能找到的每个示例并尝试了所有我能想到的方法,包括手动将引擎状态设置为 SCRIPTSTATE_CONNECTED,实现它所支持的任何其他接口等等。我什至尝试返回一个有效的 @ 987654332@。似乎没有什么不同。
知道什么给了?我认为这个基本示例应该适用于 Chakra。
【问题讨论】:
-
看起来 SCRIPTITEM_GLOBALMEMBERS 有帮助,但它有副作用。测试环境是 Windows 8.1/IE11。我建议您在 connect.microsoft.com/IE 上触发一个错误。
-
我们几天前提交了:connect.microsoft.com/IE/feedback/details/792455/…。仍在等待反馈,但听起来我们现在可能不走运。我们正在为我们的用例寻找一种可能的解决方法。
标签: internet-explorer-9 bho jscript chakra iactivescript