我们将IE扩展实现为浏览器帮助对象(BHO)。我们有一个用C ++编写的实用程序函数,我们将其添加到页面的窗口对象中,以便页面中的其他脚本可以使用它来动态加载本地脚本文件。但是,为了解析这些本地脚本文件的相对路径,我们需要确定调用函数的JavaScript文件的路径:
myfunc()
用C ++编写并暴露给页面的JavaScript 从顶部框架我想获取调用myfunc()
的脚本位于file:///path/to/some/javascript.js中的信息。
我首先希望我们可以简单地使用IActiveScriptDebug
接口从我们的实用程序函数中获取堆栈跟踪。但是,似乎无法从IActiveScript
界面或相关文档中获取IWebBrowser2
界面(请参阅Full callstack for multiple frames JS on IE8)。
我唯一能想到的就是注册我们自己的脚本调试器实现并让myfunc()
进入调试器。但是,我怀疑这会在不提示用户是否想要进入调试器的情况下工作。
在对这种方法进行更全面的测试之前,我想检查是否有人有关于这是否可行的确切信息和/或可以建议一种替代方法,该方法将使用C ++编写的函数从中获取堆栈跟踪调用它的脚本引擎。
答案 0 :(得分:1)
您加载的每个脚本都可能有一个id,并且调用myfunc()的脚本的每个方法都可以将此id传递给myfunc()。这意味着首先您必须修改myfunct()并最终更改脚本和调用。
答案 1 :(得分:0)
这个答案描述了我如何解决我在原始问题中描述的实际问题。问题描述并不是很好,因为我在假设如何解决实际上没有根据的问题。我真正想要做的是确定当前运行脚本的路径。我已经改变了问题的标题,以便更准确地反映这一点。
这实际上很容易实现,因为脚本在加载时在HTML文档中执行。因此,如果我当前正在执行由script
标记加载的某些JavaScript,那么script
标记将始终是文档中的最后一个脚本标记(因为文档的其余部分尚未加载) 。要解决此问题,只需获取最后一个脚本标记的src
属性的URL,并根据该属性解析任何相对路径。
当然这对于直接嵌入HTML页面的脚本不起作用,但这无论如何都是不好的做法(IMO)所以这似乎不是一个非常重要的限制。