DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> 在浏覽器中獲取當前執行的腳本文件名的代碼
在浏覽器中獲取當前執行的腳本文件名的代碼
編輯:關於JavaScript     
背景
同事提了一個問題,如何在浏覽器中動態插入的 JavaScript 文件中,獲取當前文件名?

除了服務器輸出一個文件名外,在腳本中獲取應該只有下面三種做法。

解法A
普遍的解法,只能用於頁面靜態scripts標簽引入或者單個動態加載。
復制代碼 代碼如下:
var scripts = document.getElementsByTagName('script');
var filename = scripts[scripts.length -1].src;

動態插入多個腳本標簽的情況:
復制代碼 代碼如下:
loadScript('b.js?param=1')
loadScript('a.js?param=2')
loadScript('b.js?param=3')
loadScript('a.js?param=4')

/* 輸出
a.js >>> http://localhost:800/io/a.js?param=4
a.js >>> http://localhost:800/io/a.js?param=4
b.js >>> http://localhost:800/io/a.js?param=4
b.js >>> http://localhost:800/io/a.js?param=4
*/

解法B
變態型,只能工作於FireFox:
復制代碼 代碼如下:
try {
throw new Error();
}
catch(exception){
console.log( exception.fileName );
}

解法C
我的解法,操作源代碼:
復制代碼 代碼如下:
requireScript('a.js?'+Date.now(),function(text,src) {
console.log('text:',text);
globalEval('(function() { \nvar __filename = "'+ src +'";\n'+ text +'\n;})();');
})

浏覽器輸出:
復制代碼 代碼如下:
<script>(function() {
var __filename = "a.js?1310971812334";
var scripts = document.getElementsByTagName('script');
console.log('a.js',' >>> ',scripts[scripts.length -1].src);
console.log(__filename);
;})();</script>

優點:可靠、可緩存、可推遲執行、可擴展。
限制:1)變量命名被約定為“__filename”;2)同源策略。
又想到這個加載策略用來加載流行的 CoffeeScript,比如:
復制代碼 代碼如下:
requireScript('script.coffee',function(text,src) {
if( isCoffeeScript(src) )
globalEval( CoffeeScript.compile(text) );
})

鏈接

Cross-Origin Resource Sharing

Passing JavaScript arguments via the src attribute

CoffeeScript

查看或下載

https://gist.github.com/1088730

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved