我遇到了这个问题,我无法弄清楚如何正确解决。
我正在使用脚本:
<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。
有什么想法吗?
答案 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
当然,如果您正在寻找一个更强大的解决方案,如果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
如果由于某种原因,您希望/需要在捕获值之前让它在浏览器中执行,您可以执行类似的操作,但我确定它不符合标准且似乎相当hackish。
<script>
标记包装在容器中,可能是<span>
或<div>
样本(未经测试):
<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)
我想到的唯一(脏)事情是你使用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>