一個變量想知道怎樣才能從負載JS像傳遞一個變量:通過從JS jQuery的
<script type="text/javascript" src="script.js?myVar=myValue"></script>
和使用,並傳遞給自己的script.js? 我知道關於聲明變量之前,但我正在尋找網址的方式。
在此先感謝。
一個變量想知道怎樣才能從負載JS像傳遞一個變量:通過從JS jQuery的
<script type="text/javascript" src="script.js?myVar=myValue"></script>
和使用,並傳遞給自己的script.js? 我知道關於聲明變量之前,但我正在尋找網址的方式。
在此先感謝。
您可以使用document.currentScript
,但它沒有得到廣泛支持。
var matches = document.currentScript.src.match(/\?myVar=([^&]+)/),
myVarParam = matches && matches[1];
或者,你可以嘗試獲得script
元素與匹配的URL並解析出GET PARAM。
var scriptPath = 'path/to/this/script.js',
matches = $('script[src^="' + scriptPath + '"]').attr('src').match(/\?myVar=([^&]+)/),
myVarParam = matches && matches[1];
JavaScript不會有權訪問該值。服務器將不得不尋找它並代表您將該值插入到呈現的JavaScript中。
通常不過,該模式更像是這樣的:
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript">
ObjFromScript.myVar = 'myValue';
ObjFromScript.doStuff();
</script>
你必須找到文檔中的<script>
標籤並提取參數。使用此網站的一個突出例子是帶有#xfbml=1
#標籤的臉書。
但是,正確/好方法是不放任何代碼,但功能script.js
,然後致電someFunction(myValue);
。
FaceBook如何從URL中提取它?用JavaScript? – alex 2011-05-20 23:46:15
是的,他們的腳本嵌入到他們的站點中,他們顯然可以訪問該站點的DOM樹。而且由於他們知道腳本的URL,他們可以簡單地搜索指向它的腳本標籤,然後從其src'屬性中提取參數。 – ThiefMaster 2011-05-20 23:47:53
哦,是的,當我真正使用我的頭時,這是如此明顯:) – alex 2011-05-20 23:49:36
您可以在客戶端或服務器上執行此操作。在客戶端上,獲取script
元素並解析src
屬性。
<script id="myScript" src="script.js?myVar=foo"></script>
<script>
var s = document.getElementById('myScript');
s.src; // parse it and extract myVar
</script>
在服務器上,設置路由,以便script.js
去處理一些寫在PHP的服務器端語言。在這種情況下,您可以動態輸出script.js
。這裏是PHP中的一個例子。
的script.js =>的script.php
<?php
header('Content-Type: application/javascript');
$myVar = $_GET['myVar'];
?>
// optionally expose myVar inside JavaScript
var myVar = <?php json_encode($myVar) ?>;
// regular JavaScript
alert(myVar);
var x = 10;
':last'?您無法知道加載的腳本的腳本標記是否是最後一個腳本標記。因此,您需要進行迭代,除非您不希望它可移植 - 請檢查"rc「以匹配腳本文件的位置/名稱(需要在腳本中對其進行硬編碼)。 – ThiefMaster 2011-05-20 23:40:13
@Thief我在想,因爲腳本是同步執行的 - 只要這段代碼直接在鏈接文件中運行即可。也許我錯了,只是試圖想出一個解決方案:) – alex 2011-05-20 23:42:18
無論哪種方式,這種方法讓我覺得自己是一個聰明的黑客,讓你做錯了。我個人不會鼓勵它。 – 2011-05-20 23:42:25