这是通过将代码放入临时散列 JavaScript 文件来处理代码的好方法;
演示:http ://so.ghostsofthesun.com/user_965921/
索引.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title></title>
<style>
.floatClear {
clear: both;
}
#userScript, #result {
float: left;
font-family: monospace;
box-sizing: border-box;
padding: 20px 15px;
width: 500px;
min-height: 300px;
background-color: #333;
color: #eee;
border-radius: 10px;
border: 5px solid orange;
box-shadow: 0px 3px 5px #444;
outline: none;
}
#result {
margin-left: 20px;
}
#submitCode {
margin: 20px;
}
</style>
<script src="http://code.jquery.com/jquery-1.10.0.min.js"></script>
<script>
$(document).ready(function() {
$('#submitCode').click(function() {
var input = {'code' : JSON.stringify($('#userScript').val().trim())};
$.post('process_code.php', input, function(data) {
$('#result').html('YES');
data = jQuery.parseJSON(data);
js_file_path = data.js_file_path;
$('script[data^=tmp_js]').remove();
$('head').append('<script data="tmp_js" src="' + js_file_path + '"><\/script>');
});
});
});
</script>
</head>
<body>
<textarea id="userScript">var test = 21; console.log(test);</textarea>
<div id="result">Result will be here</div>
<div class="floatClear"></div>
<button id="submitCode">Execute code!</button> (The left panel is editable)
</body>
</html>
process_code.php
<?php
if (isset($_POST['code'])) {
$code = json_decode($_POST['code']);
// Create new JS file
$js_file = 'tmp_'.md5(microtime()).'.js';
$handle = fopen($js_file, 'w') or die('can\'t open file');
fwrite($handle, $code);
fclose($handle);
$full_path = 'http://localhost:8888/'.$js_file;
echo json_encode(array('js_file_path' => $full_path));
}
else {
echo json_encode(array('error' => 'Code wasn\'t recieved correctly.'));
}
// Do someting to remove the created JS-file after a certain time (cache/buffer empty)
?>
..并替换;
$full_path = 'http://so.ghostsofthesun.com/user_965921/'.$js_file;
$_
.. 使用您的主机路径(或使用超级全局变量自动检测它。
当然,您可以直接将代码重新路由到脚本标签中,但是当我手头有这个时,我想我会立即分享完整的 shebang :)
现代浏览器会注意到添加的脚本标签并立即执行它。IE 可能无法很好地处理它;您可能想在不同的平台上对其进行测试。否则,您可以在 Internet 上搜索在实时嵌入脚本后调用 JavaScript 的方法。
输入到左侧字段的其他示例;
$('#result').css({
'font-size' : '60px',
'color' : 'blue',
'background' : '#aaa'
});
额外说明;
您可能想要使用$.getScript()
(正如我刚刚发现的那样)而不是重新绑定动态脚本标签;
$.post('process_code.php', input, function(data) {
$('#result').html('YES');
data = jQuery.parseJSON(data);
js_file_path = data.js_file_path;
$.getScript(js_file_path);
//$('script[data^=tmp_js]').remove();
//$('head').append('<script data="tmp_js" src="' + js_file_path + '"><\/script>');
});