猿问
下载APP

我如何从该脚本中获取脚本文件名?

我如何从该脚本中获取脚本文件名?

我很确定答案是否定的,但我想我还是会问。

如果我的站点引用了一个名为“whatever.js”的脚本,是否可以从该脚本中获取“whatever.js”?喜欢:

var scriptName = ???if (typeof jQuery !== "function") {
    throw new Error(
        "jQuery's script needs to be loaded before " + 
        scriptName + ". Check the <script> tag order.");}

可能比依赖检查更值得麻烦,但是到底是怎么回事。


元芳怎么了
浏览 76回答 3
3回答

慕桂英3389331

var&nbsp;scripts&nbsp;=&nbsp;document.getElementsByTagName('script');var&nbsp;lastScript&nbsp;=&nbsp;scripts[scripts.length-1];var&nbsp;scriptName&nbsp;=&nbsp;lastScript.src;alert("loading:&nbsp;"&nbsp;+&nbsp;scriptName);测试:FF 3.0.8,Chrome 1.0.154.53,IE6

慕雪6173905

我知道这已经过时了,但我已经开发出了更好的解决方案,因为上述所有内容都不适用于异步脚本。通过一些调整,以下脚本可以涵盖几乎所有用例。什么对我有用:function&nbsp;getScriptName()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;error&nbsp;=&nbsp;new&nbsp;Error() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;lastStackFrameRegex&nbsp;=&nbsp;new&nbsp;RegExp(/.+\/(.*?):\d+(:\d+)*$/) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,&nbsp;currentStackFrameRegex&nbsp;=&nbsp;new&nbsp;RegExp(/getScriptName&nbsp;\(.+\/(.*):\d+:\d+\)/); &nbsp;&nbsp;&nbsp;&nbsp;if((source&nbsp;=&nbsp;lastStackFrameRegex.exec(error.stack.trim()))&nbsp;&&&nbsp;source[1]&nbsp;!=&nbsp;"") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;source[1]; &nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if((source&nbsp;=&nbsp;currentStackFrameRegex.exec(error.stack.trim()))) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;source[1]; &nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(error.fileName&nbsp;!=&nbsp;undefined) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;error.fileName;}不确定Internet Explorer上的支持,但在我测试的其他所有浏览器中都能正常工作。

米脂

您可以使用...var&nbsp;scripts&nbsp;=&nbsp;document.getElementsByTagName("script"), &nbsp;&nbsp;currentScriptUrl&nbsp;=&nbsp;(document.currentScript&nbsp;||&nbsp;scripts[scripts.length&nbsp;-&nbsp;1]).src;currentScript()&nbsp;除了IE之外的所有浏览器都支持。确保它在解析和执行文件时运行,而不是在DOM就绪或window加载时运行。如果它是一个空字符串,则您的script块没有或没有空src属性。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答