2011-08-09 75 views
1

我有一個包含一些HTML的字符串。在該HTML中有一些<script>,其中有一個定義的變量。我如何訪問該變量?在HTML + JS字符串中訪問JS變量

例如我做XHR請求,返回是這樣的:

<html> 
<head> 
<!-- irrelevant code --> 
<head> 
<body> 
<!-- irrelevant code --> 
<script>var bar = {car: tar};</script> 
<!-- irrelevant code --> 
</body> 
</html> 

,我需要訪問bar變量。基本上發生了什麼,我可以訪問腳本dom.ltd/foo.js,這使得XHR請求dom.ltd/bar.php,它返回HTML + JS。

JS保存在服務器端生成的JSON字符串。不幸的是,我不允許觸摸PHP,因此我需要將它從返回的字符串中解析出來。

+0

您可以傳遞一個變量在一個隱藏的元素作爲一個JSON字符串,並與JS事後閱讀。 – yoda

+0

這不是一個選項,因爲我無法控制所請求文件的輸出。 – Gajus

+0

從*哪裏*你到底需要閱讀var?你能發佈「閱讀」代碼片段嗎? – mamoo

回答

2

完成該操作的唯一方法是剪切字符串和標籤之間寫入的任何內容。我並不想提出我的手指,告訴你,這可能是一個危險的事情(也可以是如果源不被信任),所以這裏是處理:

var recv = "<html><head><body><script>var bar = {car: 'tar'};</script></body></html>", 
    code = /<script>(.*?)<\/script>/.exec(recv)[ 1 ]; 

eval(code); 
console.log(bar); // Object { car="tar" } 

我會形容爲以上可怕的代碼,因爲用正則表達式解析HTML是一件壞事,eval是一件壞事,將HTML傳輸到客戶端是件壞事。 但是,在非常小的沙箱環境中,這將起作用。如果您無法更改服務器行爲來傳輸JSON數據而不是HTML,那麼您確實需要確保其中不存在任何惡意代碼。

0

,如果你知道了吧變量始終是在格式的數組,我會去這樣的事情:

var bar = response.substring(indexOf("{"), indexOf("}"));