2010-08-04 135 views
2

我有一個JavaScript文件,它在網站上嵌入了一個小部件。我希望能夠通過以下形式的URL來調用這個小部件:通過調用URL傳遞JavaScript參數

http://domain.com/widget.js?variable=test 

在JS腳本我希望能夠在URL參數「變量」,這是這種情況下是「價值閱讀測試「並將其用於JS輸出的HTML代碼中。我嘗試使用window.location,但返回主網頁的URL而不是正在調用加載腳本的URL。

任何想法的JS代碼看起來像傳遞參數中讀取?提前致謝!

+0

'document.location.search'或'parent.document.URL'有幫助嗎? – vol7ron 2010-08-05 00:08:22

回答

3

使用getElementsByTagName遍歷所有<script>元素。通過檢查src屬性查找標識腳本的標識(例如,通過查找domain.com/widget.js)。從src屬性中提取查詢字符串。

例子:

function getScriptQuery(identifier) { 
var scripts = document.getElementsByTagName('script'), 
    i, curScript; 

for (i = 0; i < scripts.length; ++i) { 
    curScript = scripts[i]; 

    if (curScript.src.match(identifier)) { 
    return (curScript.src.match(/\?.*/) || [undefined])[0]; 
    } 
} 
} 

alert(getScriptQuery('widget.js')); 

有解決您的原始數據傳遞到腳本的問題,有兩種常見的替代品。

您可以在腳本中引用一個已知的全局變量,並有主叫HTML定義變量:

<script type="text/javascript">var MyWidgetData={foo:'bar'};</script> 
<script src="http://my.widgeteer.net/widget.js"></script> 

// widget.js: 

alert(MyWidgetData.foo); 

你也可以換你的腳本作爲命名功能,並具有調用HTML調用該函數:

<script src="http://my.widgeteer.net/widget.js"></script> 
<script type="text/javascript">MyWidget({foo:'bar'});</script> 

// widget.js: 

function MyWidget(data) { 
    alert(data.foo); 
} 
+0

這真的是最簡單的方法嗎? JavaScript必須有一些更有效的方法來讀取調用它的URL。我猜不會。如果這是最簡單的方法,我不確定會是什麼樣子?你能提供一些示例代碼嗎? – 2010-08-04 21:17:08

+0

快速跟進。有沒有更好的方式來傳遞參數而不是調用URL?也許在腳本標籤中添加它們? – 2010-08-04 21:37:25

+0

@Russell C.,增加了一個例子。如果'src'中指定的腳本執行,'