首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用IE9 JS引擎(Chakra)添加SCRIPTITEM_CODEONLY符号时出错

使用IE9 JS引擎(Chakra)添加SCRIPTITEM_CODEONLY符号时出错
EN

Stack Overflow用户
提问于 2013-07-04 22:18:56
回答 1查看 403关注 0票数 1

我们在浏览器扩展(BHO)和旧的JScript引擎(CLSID_JScript)中使用活动脚本已经有一段时间了,最近我们决定也支持新的IE9脚本引擎(Chakra)。我们做的一件事是使用带有SCRIPTITEM_CODEONLY选项的AddNamedItem向引擎添加符号,以创建我们自己的模块(名称空间)。不幸的是,我们还不能让它与Chakra一起工作。即使是最简单的例子,我们添加一个符号并立即检索它的脚本调度,也会产生E_OUTOFMEMORY错误。

代码语言:javascript
运行
复制
if (SUCCEEDED(hr)) {
  hr = scriptEngine->AddNamedItem(L"test", SCRIPTITEM_CODEONLY);
}
if (SUCCEEDED(hr)) {
   hr = scriptEngine->GetScriptDispatch(L"test", &scriptDispatch);
}

GetScriptDispatch调用返回错误。您可以看到整个示例on Github

我在所有IActiveScriptSite方法上都设置了断点,并且只调用GetLCIDOnStateChange方法,所以不要认为站点实现是问题所在。

我已经查看了我能找到的每个示例,并尝试了我能想到的所有方法,包括手动将引擎状态设置为SCRIPTSTATE_CONNECTED,实现它所针对的任何其他接口,等等。我甚至尝试返回一个有效的LCID。似乎没有什么能让事情有所不同。

知道是什么原因吗?我假设这个基本的例子应该可以在Chakra中工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-11 06:11:37

不幸的是,Chakra公开的一组IActiveScript接口并不是供公众使用的。(正是由于这个原因,GUID不会发布到注册表中。)Chakra只实现了支持Internet Explorer和Visual Studio编辑器/调试器所需的那部分IActiveScript接口,并且除了这两个客户端使用的接口之外,没有做出任何努力来确保接口的完整性或正确性。

看起来你的场景是那些没有按照规范实现的场景之一,可能是因为IE/VS没有以这种特殊的方式使用接口。可悲的是,除非决定在IE的未来版本中公开支持IActiveScript接口,否则这个问题几乎不可能得到解决。

IE11为Chakra引入了一个公共API,但它不是基于IActiveScript的,而是基于win32的。你可以在这里获得更多详细信息:http://www.panopticoncentral.net/2013/07/02/introducing-jsrt-embedding-javascript-on-windows/。我不知道这对你的情况有没有帮助。

抱歉,答案不是你想要的,我敢肯定...

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17472638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档