2013-07-08 230 views
2

傳遞JavaScript的論點,如果我有一個javascript像通過腳本src屬性

<script src="http://domain.com/js/script.js"> 

SRC我可以多一些值添加到它的

<script src="http://domain.com/js/script.js?state=1"> 

結束並獲得了JavaScript內的狀態?

這個想法來自一個情況,我必須得到客戶端解析並保存到會話,但我不能把它通過PHP,所以我必須得到它的JavaScript,但我不想顯示腳本裸從源代碼

我認爲這是可能的,因爲我看到很多來源確實有這樣的鏈接!

+1

爲什麼你必須將該決議通過腳本?腳本無法在需要時計算它嗎? – JJJ

+0

我不明白你的意思。 「國家」會做什麼? –

+1

任何時候,我已經添加一個查詢字符串參數到腳本源,它已經是一個時間戳或版本,以防止緩存。 –

回答

3

你不能這樣做嗎?

<script> 
    var state = 1; 
</script> 
<script src="http://domain.com/js/script.js"> 
+0

啊,謝謝!我怎麼能忘記這一點! –

+0

我同意dandavis。這並沒有回答這個問題。當然,它解決了他們的問題。但他們提出的問題是不同的。 – RoboticRenaissance

1

調用JS工作之前給變量。但是如果你不想用vars污染Global,你可以嘗試一下PHP的方法:

在頭文件中聲明一個PHP文件,它將是一個javascript,根據你想要的變量抓取它,使用$_GET值和輸出具有

<script src="http://domain.com/js/script.php?state=1" />

<?php 
// We'll be outputting a JS 
header('Content-type: text/javascript'); 

$phpState = $_GET['state']; 
?> 

function someCommonJS(){ 
    var myState = "<?=$phpState;?>"; /*printing php var into js*/ 
} 

<?php 
/* some more php*/ 
?> 

/*some more js*/ 

這樣的文件來,只要你想格式化的js文件,無需用戶能夠看到所有的if else如果通過JS實現,這將是可見的。

10

以防萬一有人想實際答案的實際問題,而不是訴諸於全局變量和兩個腳本標籤:

<script src="http://domain.com/js/script.js?state=1"></script> 

內的script.js:

(function(){ 
    var myTags=document.getElementsByTagName("script"); 
    var src= myTag[myTag.length-1].src; 
    var state=unescape(src).split("state=")[1].split("&")[0]; 
    alert(state); 
}()); 

,如果您需要傳遞很多東西,使用通用的queryString解析器將腳本的queryString轉換爲對象。

+0

我知道這已經兩歲了,但它完美地適用於我正在構建的包含我的1行小部件。它需要一個用戶ID,我現在可以傳遞而不會混淆全局名稱空間。 +1 – jrounsav

+2

@Cluckles:知道新的瀏覽器支持'document.currentScript'屬性,這使得函數的「膽量」歸結爲'state = unescape(document.currentScript.src).split(「state =」) [1] .split( 「&」)[0]' – dandavis