2011-08-09 37 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("}"));