2011-11-14 33 views
3

私はこの問題の前で正しく解決する方法を理解できません。出力として単一document.writeを持ってPHP JavaScriptがdocument.writeの内容を変数に書き込む

<script type="text/javascript" src="http://www.gta4.it/stat/view_stats.js.php?mode=0"> </script> 

document.write('11'); 

そしてそう数が表示されている使用してJavaScriptの

私は、スクリプトを使用しています。 私がしたいことは、このdocument.writeの内容を取得し、それを別のサーバーの変数、JavaScriptまたはPHPに書き込むことです。

答えて

2

このスクリプトは、ほんの少しのJavaScriptスニペットを出力している - あなたが実際にあなたがPHPでその結果をキャプチャしたい場合には、ブラウザで実行できるようにする必要はありませんの

// Assuming you have [allow_url_fopen][1] enabled 
$js = file_get_contents('http://www.gta4.it/stat/view_stats.js.php?mode=0'); 
$value = trim(str_replace(array("document.write('", "');"), '', $js)); 
echo $value; // Outputs 9, the current value of the JS 

Demo

JSスニペットが変更された場合(空白を導入したり、引用タイプを変更するなど)、スニペットから数を抽出するために正規表現を使用することができます。このような何か作業をする必要があります:

$js = file_get_contents('http://www.gta4.it/stat/view_stats.js.php?mode=0'); 
$value = preg_replace('/^\s*document\.write\(\s*[\'"](\d*)[\'"]\s*\)\s*;\s*$/im', '$1', $js); 
echo $value; // Outputs 11, the now current value of the JS 

Demo

が、場合何らかの理由で、あなたがしたい/それは、あなたがこのような何かを行うことができます値をキャプチャする前に、ブラウザで実行させる必要性を、私は」が、標準に準拠しておらず、かなりハックしているようです。

  1. ラップコンテナの内容を取得するためのコンテナ内<script>タグ、おそらく<span>または<div>
  2. 使用JS。
  3. AJAXを使用して結果をサーバーに送信します。

サンプル(未テスト):あなたは任意のJavaScript関数と同様のJavaScript/HTML

<span id="getvar" style="display: none;"> 
    <script type="text/javascript" src="http://www.gta4.it/stat/view_stats.js.php?mode=0"> </script> 
</span> 
<script type="text/javascript"> 
var getvar = document.getElementById('getvar'); 
var stat = parseInt(getvar.innerText || getvar.textContent); 
</script> 
0

編集:私は、Brian Nickelのハイジャックは、あなたがJSでそれをしたい場合に最適なソリューションだと思います。これはあなたのための解決策ではない場合、あなたはいつも私の解決策を試すことができます。もちろん、サーバー側の検索では、file_get_contentsのようなものを使うことができます。

私の頭に浮かんでいる唯一の(汚れた)ことは、iframeを使用して、あなたが言及したスクリプトを含むページを読み込むことです。データの取得後にあなたには、いくつかのスクリプトを使用して、あなたのページからiFrameを削除することができ、もちろん

$content = getContentFromIframe("something"); 

function getContentFromIframe(iFrameId){ 
    var myFrame = document.getElementById(iFrameId); 
    return myFrame.contentWindow.document.body.innerHTML; 
} 

:あなたはよりそうのように、変数にiframe内にあるwhatverあなたの実際のページとグラブではiframeをロードすることができます。とにかく、スタイリングを使って隠すことを前提としています。

PHPのようなサーバー側の言語になるように値するには、ファイルをfile_get_contentsなどで呼び出すだけでファイルの内容を取得できます。

+1

これはあなたのページがiframeのページと同じドメインにある場合にのみ機能します。 –

0

、あなたはdocument.writeをハイジャックし、あなたとそれを置き換えることができますすることができます自身の機能:

<script> 
    var oldWrite = document.write; // Save original function. 
    var myValue = ""; 
    document.write = function(str) {myValue += str;}; // Overwrite function. 
</script> 
<script type="text/javascript" src="http://www.gta4.it/stat/view_stats.js.php?mode=0"> </script> 
<script> 
    document.write = oldWrite; // Restore old function. 
    alert(myValue); 
</script> 

あなたはここで実際にそれを見ることができます:http://jsfiddle.net/qwef4/

+0

私はあなたが何を意味するのか分かりません。私はそれをテストし、それは正常に動作するようです。 –

+0

@Baszz、 'document.write'は、DOMの読み込みが終了した後に呼び出された場合にのみ、ページコンテンツをクリアします。その時点より前には、挿入ポイントにコンテンツを追加するだけで、物理ファイルの一部であるかのように動作します。ページのロード(タイムアウト、イベント、AJAX)の後でのみ、 'document.write(foobar)'と同等の 'document.write(foobar)'です。 –

5

にこのような何かを行うことができ

<div id="stats_container"> 
    <script type="text/javascript" src="http://www.gta4.it/stat/view_stats.js.php?mode=0"> </script> 
</div> 
<script type="text/javascript"> 
    var value = document.getElementById('stats_container').innerHTML; 
    alert(value); // Here you would use AJAX to send the value to a server 
</script> 
+0

クール!私はこれが好き –

関連する問題