javascript文件可以获得自己的名字吗?

时间:2009-12-08 09:55:25

标签: javascript html ajax

我正在尝试在javascript中构建某种记录器功能。脚本是否有任何API可以获取自己的文件名?

6 个答案:

答案 0 :(得分:12)

这应该有效: (new Error).fileName

或者你可以试试这个:

var filepath;
(function(){ 
    var scripts = document.getElementsByTagName('script'); 
    filepath = scripts[ scripts.length-1 ].src; 
}());

第二个选项为您提供脚本文件的路径。

答案 1 :(得分:6)

我看到两种方式:

  • 将每个JS文件放入变量var filename = 'script.js';
  • 使用<script>标记名称
  • 获取文件名

JS无法获取类似bash / perl / c脚本的文件名。

答案 2 :(得分:4)

如果我们可以获取当前脚本的标记,那么我们可以读取其src属性。摘自以下https://stackoverflow.com/a/22745553/4396817

  

document.currentScript将返回其脚本当前正在处理的元素。

<script>
  var me = document.currentScript;
</script>

优势

  • 简单明了。可靠。
  • 不需要修改脚本标记
  • 使用异步脚本(延迟和异步)
  • 使用动态插入的脚本

问题

  • 无法在旧浏览器和IE浏览器中使用。

...从那里,我们可以简单地阅读src属性!

<script src="http://website.com/js/script.js">
  alert(document.currentScript.src);
</script>

// Alerts "http://website.com/js/script.js"

答案 3 :(得分:1)

这是我的修改,修复了一些可能的问题,但增加了一项要求。

它需要您以某种方式命名文件,例如,如果您有.js文件,但您想知道加载了哪个版本(例如告诉php服务器)。所以你的js文件将是&#34; zoom_v34.js&#34;。

    var version;
    (function(){
        var scripts = document.getElementsByTagName('script');
        for (var i=0; i<scripts.length; i++) {
            var start = scripts[i].src.indexOf('zoom_');
            if (start != -1) { var end = scripts[i].src.indexOf('.',start); version = scripts[i].src.substr(start+6,end-start-6); break; }
        }
    }());
    post='login{JS:'+version+'}';

答案 4 :(得分:0)

不幸的是,这是不可能的。

如果您改变方法,获取功能名称可能会对您有所帮助。你最好的机会是从“arguments.callee”中提取函数名。这仅在函数定义为

时有效
function FN() { ... }

时不起作用
var FN = function() { ... }

答案 5 :(得分:0)

您可以尝试将其放在JavaScript文件的顶部:

    <TabControl x:Name="tabControl">
        <TabItem Header="1'st Tab">
            <ContentControl Content="{Binding .}">
                <ContentControl.ContentTemplate>
                    <DataTemplate>
                        <Button Content="Do no thing"></Button>
                    </DataTemplate>
                </ContentControl.ContentTemplate>
            </ContentControl>
        </TabItem>
        <TabItem Header="2'nd Tab">
            <ContentControl Content="{Binding .}">
                <ContentControl.ContentTemplate>
                    <DataTemplate>
                        <local:UserControl1/>
                    </DataTemplate>
                </ContentControl.ContentTemplate>
            </ContentControl>
        </TabItem>
    </TabControl>

确保您只有此功能。 myJSFilename全局变量将包含JavaScript文件的完整路径,并且可以从中解析文件名。在IE11中测试过,但它应该可以在其他地方使用。