我正在尝试在javascript中构建某种记录器功能。脚本是否有任何API可以获取自己的文件名?
答案 0 :(得分:12)
这应该有效:
(new Error).fileName
或者你可以试试这个:
var filepath;
(function(){
var scripts = document.getElementsByTagName('script');
filepath = scripts[ scripts.length-1 ].src;
}());
第二个选项为您提供脚本文件的路径。
答案 1 :(得分:6)
我看到两种方式:
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>
...从那里,我们可以简单地阅读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中测试过,但它应该可以在其他地方使用。