2011-05-20 32 views
0

一個變量想知道怎樣才能從負載JS像傳遞一個變量:通過從JS jQuery的

<script type="text/javascript" src="script.js?myVar=myValue"></script> 

和使用,並傳遞給自己的script.js? 我知道關於聲明變量之前,但我正在尋找網址的方式。

在此先感謝。

回答

0

您可以使用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]; 
+0

':last'?您無法知道加載的腳本的腳本標記是否是最後一個腳本標記。因此,您需要進行迭代,除非您不希望它可移植 - 請檢查"rc「以匹配腳本文件的位置/名稱(需要在腳本中對其進行硬編碼)。 – ThiefMaster 2011-05-20 23:40:13

+0

@Thief我在想,因爲腳本是同步執行的 - 只要這段代碼直接在鏈接文件中運行即可。也許我錯了,只是試圖想出一個解決方案:) – alex 2011-05-20 23:42:18

+1

無論哪種方式,這種方法讓我覺得自己是一個聰明的黑客,讓你做錯了。我個人不會鼓勵它。 – 2011-05-20 23:42:25

3

JavaScript不會有權訪問該值。服務器將不得不尋找它並代表您將該值插入到呈現的JavaScript中。

通常不過,該模式更像是這樣的:

<script type="text/javascript" src="script.js"></script> 
<script type="text/javascript"> 
    ObjFromScript.myVar = 'myValue'; 
    ObjFromScript.doStuff(); 
</script> 
2

你必須找到文檔中的<script>標籤並提取參數。使用此網站的一個突出例子是帶有#xfbml=1#標籤的臉書。

但是,正確/好方法是不放任何代碼,但功能script.js,然後致電someFunction(myValue);

+0

FaceBook如何從URL中提取它?用JavaScript? – alex 2011-05-20 23:46:15

+1

是的,他們的腳本嵌入到他們的站點中,他們顯然可以訪問該站點的DOM樹。而且由於他們知道腳本的URL,他們可以簡單地搜索指向它的腳本標籤,然後從其src'屬性中提取參數。 – ThiefMaster 2011-05-20 23:47:53

+1

哦,是的,當我真正使用我的頭時,這是如此明顯:) – alex 2011-05-20 23:49:36

1

您可以在客戶端或服務器上執行此操作。在客戶端上,獲取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;