我们有一个作为浏览器帮助对象 (BHO) 实现的 IE 扩展。我们有一个用 C++ 编写的实用函数,我们将它添加到页面的窗口对象中,以便页面中的其他脚本可以使用它来动态加载本地脚本文件。然而,为了解析这些本地脚本文件的相对路径,我们需要确定调用我们函数的 JavaScript 文件的路径:
myfunc()
用 C++ 编写并暴露给页面的 JavaScript- 文件:///path/to/some/javascript.js
- (额外的堆栈帧)
从顶部框架中,我想获取脚本调用myfunc()
位于 file:///path/to/some/javascript.js 中的信息。
我首先期望我们可以简单地使用该IActiveScriptDebug
接口从我们的实用程序函数中获取堆栈跟踪。但是,似乎不可能IActiveScript
从IWebBrowser2
接口或关联文档中获取接口(请参阅IE8 上的多帧 JS 的完整调用堆栈)。
我唯一能想到的就是注册我们自己的脚本调试器实现并myfunc()
闯入调试器。但是,我怀疑这是否会在不提示用户是否要闯入调试器的情况下起作用。
在对这种方法进行更彻底的测试之前,我想检查是否有人有关于这是否可能工作的明确信息和/或可以建议一种替代方法,使用 C++ 编写的函数能够从脚本引擎获取堆栈跟踪调用它。