我们有一个作为浏览器帮助对象(BHO)实现的IE扩展。我们编写了一个实用函数,将其添加到页面的窗口对象中,以便页面中的其他脚本可以使用它动态加载本地脚本文件。然而,为了解决这些本地脚本文件的相对路径,我们需要确定调用我们的函数的JavaScript文件的路径:
起初,我认为我们可以简单地使用
我所能想到的唯一方法是注册我们自己的脚本调试器实现,并让
myfunc()
由C++编写并向页面的JavaScript公开- file:///path/to/some/javascript.js
- (其他堆栈帧)
myfunc()
的脚本位于file:///path/to/some/javascript.js的信息。起初,我认为我们可以简单地使用
IActiveScriptDebug
接口从我们的实用函数中获取堆栈跟踪。然而,似乎不可能从IWebBrowser2
接口或相关文档中获取IActiveScript
接口(请参见Full callstack for multiple frames JS on IE8)。我所能想到的唯一方法是注册我们自己的脚本调试器实现,并让
myfunc()
进入调试器。然而,我对此是否有效并不乐观,因为这可能会在没有征得用户同意的情况下进行调试。
在对这种方法进行更彻底的测试之前,我想确认是否有人有确切的信息表明这可能有效,或者能够提出一种替代方法,使得用C++编写的函数能够从调用它的脚本引擎中获取堆栈跟踪信息。