如何使用Javascript获取当前运行脚本的路径?

Mat*_*ner 6 javascript internet-explorer bho

我们将IE扩展实现为浏览器帮助对象(BHO).我们有一个用C++编写的实用程序函数,我们将其添加到页面的窗口对象中,以便页面中的其他脚本可以使用它来动态加载本地脚本文件.但是,为了解析这些本地脚本文件的相对路径,我们需要确定调用函数的JavaScript文件的路径:

  • myfunc() 用C++编写并暴露给页面的JavaScript
  • 文件:///path/to/some/javascript.js
  • (附加堆栈帧)

从顶部框架我想获取脚本调用myfunc()位于file:///path/to/some/javascript.js的信息.

我首先期望我们可以简单地使用IActiveScriptDebug接口从我们的实用程序函数中获取堆栈跟踪.但是,似乎无法IActiveScriptIWebBrowser2接口或相关文档获取接口(请参阅IE8上的多帧JS的完全调用).

我唯一能想到的就是注册我们自己的脚本调试器实现并myfunc()进入调试器.但是,我怀疑这会在没有提示用户是否想要进入调试器的情况下工作.

在对这种方法进行更全面的测试之前,我想检查是否有人有关于这是否可行的确切信息和/或可以建议一种替代方法,该方法将使用C++编写的函数从脚本引擎获取堆栈跟踪调用它.

Mat*_*ner -1

这个答案描述了我如何解决我在原始问题中描述的实际问题。问题描述不太好,因为我对如何解决问题做出了假设,但事实证明这是没有根据的。我真正想做的是确定当前运行脚本的路径。我更改了问题的标题以更准确地反映这一点。

这实际上相当容易实现,因为脚本在加载时在 HTML 文档中执行。因此,如果我当前正在执行一些由标签加载的 JavaScript script,则该script标签将始终是文档中的最后一个脚本标签(因为文档的其余部分尚未加载)。因此,要解决此问题,只需获取src最后一个脚本标记的属性的 URL 并基于该 URL 解析任何相对路径就足够了。

当然,这对于直接嵌入 HTML 页面的脚本不起作用,但无论如何这都是不好的做法(IMO),因此这似乎不是一个非常重要的限制。