今天有人问我 js 在浏览器执行中怎么获取当前执行文件名?
我第一反应就是用 activeX。但转念一想,这都2023年了, IE 都噶了,还用个篮子的 activeX。
那就再反应一次: “Error Stack”
具体实现 实现起来也比较简单
1 2 3 4 5 6 7 8 9 10 11 12 13 function getCurrentScriptFileName ( ) { const error = new Error (); const stack = error.stack ; console .trace (stack) const matchResult = stack.match (/(http|https):\/\/[^\n]+\.js/ ); return matchResult ? matchResult[0 ] : '' ; }
执行效果 写一个小 demo 试试
1 2 3 4 5 <body > <script src ="./zz.js" > </script > <script src ="./bb.js" > </script > </body >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 function main ( ) { const filename = getCurrentScriptFileName () console .log ('file is : ' , filename) } function getCurrentScriptFileName ( ) { const error = new Error (); const stack = error.stack ; console .trace (stack) const matchResult = stack.match (/(http|https):\/\/[^\n]+\.js/ ); return matchResult ? matchResult[0 ] : '' ; }
浏览器打印结果:
1 2 3 4 5 6 7 8 9 Error at getCurrentScriptFileName (http://localhost:63342/test/zz.js:10:19) at main (http://localhost:63342/test/zz.js:3:22) at http://localhost:63342/test/bb.js:1:1 getCurrentScriptFileName @ zz.js:14 main @ zz.js:3 (anonymous) @ bb.js:1 file is : http://localhost:63342/test/zz.js
收尾 妙啊~