问题标签 [iactivescript]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
7852 浏览

javascript - IE9 的 Javascript 引擎的 ProgId 或 CLSID 是什么(代号为“Chakra”)

使用 .NET,我可以编写一个应用程序,该应用程序托管一个符合 Microsoft 的 IActiveScript 约定的脚本引擎。这包括来自 Microsoft 的 JScript 和 VBScript,还有 PerlScript、RubyScript,我不知道还有什么来自第三方的

在代码中执行此操作的方法是这样的:

其中progId可以取值 Javascript、JScript、ECMAScript、VBScript 等。您可以在运行 cscript.exe 时执行类似的操作,在命令行中使用该//E选项指定 progId。例如,这个命令:

..将通过 JScript 引擎运行指定的文件,无论其扩展名如何。

在我的机器上,如果我查看HKLM\SW\Classes\,三个 progIds {Javascript, JScript, ECMAScript} 都指向同一个 CLSID,我猜是 JScript 5.8 脚本引擎:{f414c260-6ac0-11cf-b6d1-00aa00bbbb58}

我可以指定一个 ProgId 或 CLSID 来运行 IE9 的 Javascript 引擎,也就是“Chakra”吗?

IE9 的引擎是否仍然被 IActiveScript 加载?
Microsoft 的文档建议这样做,但没有指定 ProgId 或 CLSID。

0 投票
2 回答
1365 浏览

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

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

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

0 投票
1 回答
403 浏览

internet-explorer-9 - 使用 IE9 JS 引擎 (Chakra) 添加 SCRIPTITEM_CODEONLY 符号时出错

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

GetScriptDispatch调用返回错误。您可以在 Github 上查看整个示例。

我在所有方法上都设置了断点,IActiveScriptSite唯一调用的是GetLCIDand OnStateChange,所以不要认为站点实现是问题。

我查看了我能找到的每个示例,并尝试了我能想到的一切,包括SCRIPTSTATE_CONNECTED手动设置引擎状态、实现它所支持的任何其他接口等。我什至尝试返回一个有效的LCID. 似乎没有什么不同。

知道什么给出了吗?我假设这个基本示例应该在 Chakra 中工作。

0 投票
1 回答
197 浏览

c++ - IActiveScript 分析 - 查看脚本源

我正在玩 IE 的 JavaScript Chakra 引擎。

我已经从 MSDN 下载了示例代码,我试图弄清楚当我只有函数 ID 和脚本 ID 时如何获取函数源。

我开始分析我的 js 脚本,从分析器 ( IActiveScriptProfilerCallback2) 输出中我可以看到编译了哪些函数,调用了...

例如回调FunctionCompiled看起来像这样。我得到函数 ID 和脚本 ID,甚至函数名称,但我不知道如何找到函数源代码。

0 投票
0 回答
250 浏览

c++ - 在 IE 中获取当前页面的 IActiveScript

我有一个 IE 插件 (BHO),我想访问脚本引擎。

我想开始分析它,所以IActiveScript可能需要接口指针。

我有IWebBrowser2指针,从中我尝试获取IHTMLDocument( )并get_Document查询它但没有成功。 IActiveScriptIActiveScriptSite

我也尝试过IHTMLDocument->get_Script,但只返回脚本IDispatch指针(与 相同IActiveScript::GetScriptDispatch)。

0 投票
1 回答
1654 浏览

c++ - 使用带有 C++ 的 IActiveScript 执行 cscript

我正在尝试使用cscriptwith执行脚本IActiveScriptParseParseScriptText但由于某种原因我收到错误:E_UNEXPECTED.

这篇文章对我帮助很大。我getEngineGuid在我的代码中使用它的功能。

下面的代码是我尝试过的。它打印:

意义activeScriptParse->ParseScriptText归来E_UNEXPECTED。那么我做错了什么?

非常感谢!

0 投票
1 回答
81 浏览

javascript - 使本机 COM 方法在 jscript 中充当一等公民

我的应用程序托管 jscript ( IActiveScript, IE9)。它向它导出一个接口(对偶,IDispatch)(见下文)。我可以从 jscript 调用它:

但将其传递给另一个函数(或分配给变量)不起作用:

问题:如何让我的原生函数看起来像属性?

界面:

这是该接口的实现:

0 投票
0 回答
262 浏览

c# - 在使用 clearscript 实现的 VBScript 中获取局部变量值

我正在使用 Clearscript 为 Vbscript 实现一个调试器,该调试器预计会在遇到断点时显示所有变量及其值。

我可以使用以下代码获取所有变量:

我面临的挑战是我无法获取上下文特定的变量:例如,在函数内部设置了一个断点,然后在命中断点时,变量列表根据上述代码变为空。

有没有办法获取上下文特定的变量(函数内的变量)

考虑以下代码:

在这里遇到断点应该显示 jas = 123

请帮忙!

您可以在此处查看 Clear script 的回复: https ://clearscript.codeplex.com/discussions/640552#post1432299

0 投票
1 回答
231 浏览

c# - 将什么作为第一个参数传递给 IActiveScriptProfilerControl.StartProfiling?

尝试IActiveScriptProfilerControl::StartProfiling从我的 C# 代码中使用,我创建了这个接口定义:

我相信它被正确地翻译成.NET。

原来的第一个参数定义为

有了这些定义:

我还能够创建 MicrosoftJQueryScriptEngine对象的实例并查询IActiveScriptProfilerControl.

我目前失败的是如何告诉StartProfiling函数使用我的IActiveScriptProfilerCallback-derived 对象。

我的问题:

如何通过调用将我自己的分析器回调类与活动脚本分析器控制接口连接起来IActiveScriptProfilerControl::StartProfiling

理想情况下,我很乐意在不需要RegAsm的班级的情况下做到这一点。

更新1:

我已将接口定义的第一个参数更改为:

并尝试通过传递我的IActiveScriptProfilerCallback派生类的实例来调用此函数。

不过,我得到了错误:

类未注册(HRESULT 异常:0x80040154 (REGDB_E_CLASSNOTREG))

0 投票
0 回答
58 浏览

com - 使用 IActiveScript 执行脚本时出现静默异常

我正在使用来自 jscript.dll 的 com 对象实现了 IActiveScriptSite,因此当出现错误时,将触发 OnScriptError。这工作正常,但在某些桌面上,不会触发错误,脚本只是在错误发生时停止执行。我猜windows上有一个设置,也许在iexplore上,但我找不到它。