【问题标题】:Get Url For Currently Executing Javascript获取当前执行 Javascript 的 URL
【发布时间】:2011-01-13 06:28:31
【问题描述】:

我正在尝试查找当前正在执行的 javascript 的 url。我知道我可以将window.location.href 用于当前页面,但这不一定是正在执行的脚本的路径。

非常感谢任何帮助。

谢谢。

编辑 1: 我完全愿意使用插件等来实现这一点。不要犹豫,提出任何建议。

编辑 2: 我需要这个,以便我可以找到从我当前正在执行的脚本所在的位置到另一个资源的相对路径。问题是,例如,脚本在 /js/myScript.js 运行,而我需要引用的资源在 /imgs/test.png。由于 .js 文件可以从任何地方包含,因此无法知道 .png 文件的路径。

【问题讨论】:

  • 如果你能解释一下你为什么需要这个会有所帮助。
  • 我需要这个,以便我可以找到从我当前执行的脚本所在的位置到另一个资源的相对路径。问题是,例如,脚本在 /js/myScript.js 运行,而我需要引用的资源在 /imgs/test.png。由于 .js 文件可以从任何地方包含,因此无法知道 .png 文件的路径。

标签: javascript path


【解决方案1】:

试试这个,但我不能保证它适用于我的 Firefox 中的所有浏览器:

var scripts = document.getElementsByTagName("SCRIPT");
var script  = scripts[scripts.length-1].src;

var scriptName = script.match(/[^\\|^\/]+\.\w+\w?$/);
alert(scriptName);

会提醒脚本名称:

【讨论】:

  • 如果页面上包含多个脚本,这将如何工作?在我看来,它似乎只是抓住了最后一个脚本标签并显示它的名字。
  • 如果您在脚本的主体中,它可以工作,因为它是文档中的最后一个(其余部分尚未解析)。然后将src 放入一个变量中,并在以后需要时访问它。 (忘记scriptName 位。)
  • 我的脚本表现得比在包含它们时运行所有内容更好。使用 jQuery 框架,我的大部分脚本在文档就绪事件之前实际上并没有做任何特别的事情。对困惑感到抱歉。考虑到包含六个脚本,我不想在每个脚本包含的开头运行相同的 getElementsByTagName。它会减慢页面渲染速度,这在这种情况下是不可接受的。我宁愿只设置一个全局根路径变量,这就是我想要解决的问题。
  • 当然,你可以获取脚本的名称,但这与是否“执行”无关。如果有多个脚本怎么办?
  • @Brian:当您被包含在内时,您运行 last-script-src 嗅探,然后将其存储在特定于脚本的变量中,不做任何其他事情。这真的一点也不慢。它比 jQuery 所做的任何事情都要快得多。然后,您可以稍后在实际操作时使用该变量。但是是的:全局根路径变量是正常的方法,因为您也经常需要它用于其他目的。如果这种方法不起作用,则需要全局根:对于defer 和 HTML5 async 脚本(目前很少见)。
【解决方案2】:

基于~/ equivalent in javascript 的类似问题,Kamarey 的回答解决了我的问题。

来自 Kamarey 的回答:

使用base标签:

<head> 
   <base href="http://www.example.com/myapp/" /> 
</head> 

...

从现在开始在此页面上使用任何链接,不 javascript或html中的问题,将是 相对于基本标签,即 “http://www.example.com/myapp/”。

显然这不是我想要的,但它解决了我遇到的根本问题。通过指定基础,所有请求都相对于基础规范。

编辑: 对于任何感兴趣的人,jQuery 方法 getScript() 似乎不尊重 Firefox 3.5.7 中的基本位置。显然,这可能不是 jQuery 中的实际错误,可能更多的是 Firefox 问题,但值得注意。在 IE8 中,一切似乎都正常工作。我已经向 jQuery 提交了一张票,看看他们是否可以简化行为。您可以通过http://dev.jquery.com/ticket/6034 跟踪它。

【讨论】:

    【解决方案3】:

    我认为你不能用 JavaScript 做到这一点。您需要一个 JavaScript 跟踪插件。

    编辑: Firebug 可以帮助您,IE8 调试器也可以(按 F-12)。

    【讨论】:

    • 我对trace插件不熟悉。有什么建议?我猜跟踪插件会降低性能?
    【解决方案4】:

    您可以利用浏览器产生的错误并使用 try/catch 来找出绝对文件位置。

    我编写了一个简单的函数。可以看here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多