2011-08-09 10 views
1

私はいくつかのHTMLを含む文字列を持っています。そのHTMLには、<script>のビットがあり、そこには変数が定義されています。その変数にはどうすればアクセスできますか?HTML + JS文字列のJS変数にアクセス

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

そして、私はbar変数にアクセスする必要があります。私のようなものを返すXHR要求を、作ります。基本的に何が起きているのですか?私はdom.ltd/foo.jsというスクリプトにアクセスしています。これはXHR要求をdom.ltd/bar.phpにしてHTML + JSを返します。

JSには、サーバー側で生成されたJSON文字列が格納されています。残念なことに、私はPHPに触れることは許されていないので、返された文字列から解析する必要があります。

+0

あなたはJSON文字列として隠し要素でその変数を渡すとJSと後でそれを読むことができます。 – yoda

+0

私は要求されたファイルの出力を制御できないので、これはオプションではありません。 – Gajus

+0

から*正確にあなたはvarを読む必要がありますか? 「読書」コードのスニペットを投稿できますか? – mamoo

答えて

2

これを達成する唯一の方法は、文字列を切り取り、 <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をクライアントに転送することは悪いことです。 しかし、非常に小さなサンドボックス環境ではこれはうまくいくでしょう。 HTMLの代わりにJSONデータを送信するようにサーバーの動作を変更できる方法がない場合は、本当にそこに悪意のあるコードがないことを確認する必要があります。

0

あなたが知っていればバー変数は、常に私はこのような何かのために行くだろうという形式の配列である:

var bar = response.substring(indexOf("{"), indexOf("}")); 
関連する問題