我知道有很多“自己动手”的JavaScript编辑器,例如W3School's Try It editor,JSBin和JSFiddle。
我正在开发一个图形化JavaScript库,我想让人们从我自己的网站上试用(与其他编辑器的一个区别是我的输出是画布,而不是HTML框架)。不想重新发明轮子,是否已经建立了创建“自己动手”功能的方法,可以考虑基于DOM的脚本漏洞等问题?
答案 0 :(得分:8)
一个简单的设计是一个包含form
的{{1}}的起始页面,其中包含三个textarea
和一个iframe
。 textarea
包含html / css和javascript部分,iframe
包含结果:
<!--index.html-->
<html>
<form method="post" action="tryit-result.php" target="result">
<button>Try it</button>
<table>
<tr>
<td><textarea name="html"></textarea></td>
<td><textarea name="css"></textarea></td>
</tr>
<tr>
<td><textarea name="js"></textarea></td>
<td><iframe src="tryit-result.php" name="result"></iframe></td>
</tr>
</table>
</form>
</html>
然后在服务器上处理提交,方法是将html / css / scripts保存到文件中,然后返回引用这些文件的页面,如下所示:
<!--tryit-result.php-->
<html>
<head>
<style type='text/css'>
<?php echo file_get_contents('css contents')?>
</style>
<script type='text/javascript'>
$(function() {
<?php echo file_get_contents('js contents')?>
});
</script>
</head>
<body>
<?php echo file_get_contents('html contents')?>
</body>
</html>
答案 1 :(得分:2)
首先使用textarea和iframe创建一个简单的html页面:
<html>
<head>
<script type="text/javascript">
function data_submit()
{
document.form1.txt_data.value= document.form1.txt_html.value;
}
</script>
<title>Try It yourself Online Editor</title>
</head>
<body>
<form name="form1" id="form1" method="post" action="" >
<table width="100%" cellspacing="0" cellpadding="0" border="1">
<tr >
<td>
<input type="submit" name="bt_submit" value="Click to Execute " align="top" onClick="data_submit();"/>
</td>
<td align="center">Output</td>
</tr>
<tr>
<td width="50%" >
<input type="text" name="txt_data" value="" style="visibility:hidden;" />
<textarea rows="35" width="90px" height="550px" cols="77" name="txt_html">
</textarea>
</td>
<td width="50%" style="border-width:10px;border-style:none;">
<iframe height="550px" width="100%" src="try_it.php" name="iframe_a"></iframe>
</td>
</table>
</form>
</body>
</html>
现在用户编写的代码需要显示在iframe中,因此我们需要将代码存储在文件中。编写PHP代码来创建文件。以下是代码创建文件。
if(isset($_POST['bt_submit']))
{
$file = "try_it.php";
$fp = fopen($file, 'w');
//Following code will store the content in textarea in a variable which will create a file.
$content = $_POST['txt_data'];
fwrite($fp, $content);
fclose($fp);
}
?>
编写以下php代码,以便在用户点击提交按钮后显示默认输出并更改输出。
<?php
if(isset($_POST['bt_submit']))
{
echo trim($content);
}
else
{
echo "<html>\n";
echo "<body>\n";
echo "<h1>Hello World!!!</h1>\n";
echo "</body>\n";
echo "</html>\n";
} ?>
现在结合所有代码,您将获得一个简单的尝试自己编辑。
答案 2 :(得分:1)
这根本不需要2个文件,这可以很容易地完成: 为简单起见,我只创建一个textarea,但如果你想创建3 textarea并添加前缀,例如&lt; style&gt;或者&lt; script&gt;等
<body>
<textarea id="code" oninput="putcode(this.value)">
</textarea>
<iframe frameborder="0"></iframe>
<script>
var val;
function putcode(val){
document.querySelector("iframe").srcdoc=val;
}
</script>
</body>
你可以添加更多的CSS代码以使其更漂亮,但这是我试图解释的基本版本。并且不需要担心安全性,因为这是非常安全的。