Php Javascript将document.write的内容写入变量

时间:2011-11-14 20:58:47

标签: php javascript jquery

我遇到了这个问题,我无法弄清楚如何正确解决。

我正在使用脚本:

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

输出单document.write

document.write('11');

所以使用JavaScript显示数字。 我想要做的是获取此document.write的内容并将其写入另一个服务器中的变量JavaScript或PHP。

有什么想法吗?

4 个答案:

答案 0 :(得分:5)

与任何JavaScript函数一样,您可以劫持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/

答案 1 :(得分: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

如果由于某种原因,您希望/需要在捕获值之前让它在浏览器中执行,您可以执行类似的操作,但我确定它不符合标准且似乎相当hackish。

  1. <script>标记包装在容器中,可能是<span><div>
  2. 使用JS获取容器的内容。
  3. 使用AJAX将结果发送到服务器。
  4. 样本(未经测试):

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

答案 2 :(得分:0)

编辑:我认为Brian Nickel的劫持是JS中你想要它的最佳解决方案。如果这不是您的解决方案,您可以随时尝试我的解决方案。当然,对于服务器端检索,您仍然可以使用像file_get_contents这样的东西。

我想到的唯一(脏)事情是你使用iframe来加载包含你提到的脚本的页面。您可以在实际页面中加载iframe并将iframe中的任何内容抓取到变量中,如下所示:

$content = getContentFromIframe("something");

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

当然,在检索数据后,您可以使用某些脚本从页面中删除iFrame。但我认为你无论如何都要用一些造型来隐藏它。

如果你想要使用像PHP这样的服务器端语言,你可以通过file_get_contents调用文件来获取文件的内容。

答案 3 :(得分:0)

你可以在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>