2013-03-05 42 views
3

我想加載一個JS,他的行爲應該根據一個參數而有所不同。我認爲要做到這一點可能是方法之一:JS的參數 - 這是最好的方法?

<script src="script.js?type=a" type="text/javascript"></script> 
<script src="script.js?type=b" type="text/javascript"></script> 
... 

然後,我將使用正則表達式,如獲取參數:

function getURLParameter(name) { 
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null; 
} 

(上面的函數從here)。

但是,我不確定這是否是最好的方法。你有沒有建議任何其他的方式來做到這一點,如加載<script></script>內的全局變量,然後從JS讀取它們?

+0

表現得如何?這個參數可以改變js文件的輸出嗎?這也是有道理的,該參數可以改變多次? – awbergs 2013-03-05 16:17:15

+0

我的代碼中沒有看到與正則表達式相關的問題,除了切線方面的問題。 – JDB 2013-03-05 16:19:47

+0

我認爲這足以將標籤放在我的問題中了嗎?如果不是,請隨時將其刪除(您或任何版主)。 – Jonhas 2013-03-05 16:20:45

回答

5

有可能是一個更好的方式來組織,一般你的代碼,但配置參數的簡單方法不是URL查詢是簡單地調用所定義的功能與參數:

外部腳本(foo.js):

function foo(param) { 
    console.log(param); 
} 

HTML:

<script src="foo.js"></script> 
<script>foo("parameter value");</script> 

編輯:這裏的「配置」的參數,而不是立即調用什麼(基本上,一個簡單的閉包)的例子:

function (param) { 
    $(document).ready(function() { 
     // Use param 
    }); 
} 

$(document).ready已經是一個異步調用,所以這是比它更簡單否則,但一般情況下,您可以使用IIFE(立即調用函數表達式):(function (param) { })(paramValue)

+0

我忘了說(對不起)我的腳本是基於$(document).ready的,所以它不是我尋找的解決方案,但我知道你的意思,謝謝。 – Jonhas 2013-03-05 16:17:53

+0

你仍然可以很容易地做到這一點。我會用一個例子來修改我的答案。 – jrajav 2013-03-05 16:18:43

+0

我認爲這是最明智的方式去做你所要求的而不知道更多關於你的具體規則。 Url參數將是一個很好的方法來實現這個解決方案正在做的事情。另外你還有額外的好處,就是你的意圖是明確的。 – awbergs 2013-03-05 16:22:52

0

我只想設置獲取外部腳本前一個全局變量,那裏面使用它:

<script>var someParameter = 'a';</script> 
<script src="script.js"></script> 
+0

這看起來像一個維修噩夢。 – JDB 2013-03-05 16:16:56

+0

我不會這樣做。魔術全局變量是一個令人頭疼的問題 – awbergs 2013-03-05 16:18:55

+0

正如我剛纔提到的那樣,我想到了這一點,但我認爲這不是最優雅的解決方案,正如上面所說的那樣,需要保持一種惡夢? – Jonhas 2013-03-05 16:18:56

1

您所提供的getURLParameter函數將使用您在地址欄中看到的URL,而不是使用<script>被加載。

爲了得到這一點,你需要

Array.prototype.pop.call(document.getElementsByTagName('script')).getAttribute("src"); 
+0

你是對的 - 我沒有太在意這個例子,只是爲了說明我的意思,但我沒有真正使用它。感謝您指出。 – Jonhas 2013-03-05 16:23:44

0

更換location.search你可以讓你的JavaScript在PHP和不同的使用

var parameters = <?php echo json_encode($_GET); ?> 
function getURLParameter(name) { 
    return parameters[name]; 
} 
+0

它必須是純粹的JavaScript。我在過去使用過這種解決方法,但我寧願在這種情況下襬脫它(否則我將不得不在我的服務器中爲我的腳本運行PHP支持)。 – Jonhas 2013-03-05 16:19:46