我有一个包含一些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,因此我需要从返回的字符串中解析它。
答案 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("}"));