在HTML + JS字符串中访问JS变量

时间:2011-08-09 10:39:06

标签: javascript xmlhttprequest

我有一个包含一些HTML的字符串。在该HTML中有一些<script>,其中定义了一个变量。如何访问该变量?

e.g。我发出XHR请求,返回类似:

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

我需要访问bar变量。基本上发生了什么,我可以访问一个脚本dom.ltd/foo.js,它向dom.ltd/bar.php发出XHR请求,返回HTML + JS。

JS保存在服务器端生成的JSON字符串。不幸的是,我不允许触摸PHP,因此我需要从返回的字符串中解析它。

2 个答案:

答案 0 :(得分:2)

实现这一目标的唯一方法是剪切字符串eval()<script>标记之间写入的任何内容。我不想抬起手指告诉你这可能是一件危险的事情(如果来源不受信任,可能就是这样),所以这是交易:

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" }

我会将上面描述为可怕的代码,因为使用regexp解析HTML是一件坏事,eval是一件坏事,将HTML转移到客户端是一件坏事。 但是,在非常小的沙箱环境中,这将起作用。如果你无法改变服务器行为以传输JSON数据而不是HTML,那么你真的需要确保那里没有任何恶意代码。

答案 1 :(得分:0)

如果您知道bar变量始终是该格式的数组,我会选择以下内容:

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