这下终于可以方便地发表测试型网页代码了(附源码下载)

本文介绍了一个实用的代码运行工具,该工具能直接运行HTML、CSS及JS代码,并支持复制及保存为HTML文件等功能。作者针对Firefox浏览器进行了兼容性改进。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<h4>前言</h4>
<div class="floatRPic">
<a title="优雅的代码" href="http://justinyoung.cnblogs.com/" target="_blank"><img alt="优雅的代[码]" src="http://justinyoung.cnblogs.com/images/cnblogs_com/justinyoung/2008_1q/colorCode.PNG"></a><br>
色彩斑斓的"马"</div>
<p>虽然利用插入代码功能可以很华丽的插入色彩斑斓的代码,但是就html(Xhtml)代码、js代码、css代码而言,我更喜欢想蓝色理想论坛中的那种:有个文本框,文本框里面是网页代码,然后点击“运行代码”就可以很方便地以文本框中的内容新建一个页面,从而很直观方便的看到代码的运行效果。</p>
<p>所以今天抽了半天的时间做了这个小工具。可以很方便达到那种效果。厚道的说一声:的确参看了蓝色理想的代码,但是自己也修改了很多,因为原来的代码对firefox的兼容性实在是太差了,自己修正了比较多的代码,从而提供了对firefox更好地支持。但是非常遗憾的是,那个保存代码为html文件的功能,虽然很想也修改为能够兼容firefox,但是因为有点超出现阶段我的能力范围,所以留了个遗憾。虽然找到了一些 <a title="firefox的文件操作资料" href="http://developer.mozilla.org/en/docs/FileGuide:IO" target="_blank">比较有价值的资料</a>,但是依然没有能够实现此功能对firefox的支持。如果哪位高手有此经验,还请不吝赐教。其实那个工具,只是为了更方便以后的操作而已,并没有什么技术含量。比较核心的代码如下。</p>
<h4>核心代码</h4>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee;">
<span style="color: #008000;">/*</span><span style="color: #008000;">****运行代码******************************</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">function</span><span style="color: #000000;">runCode(){<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">newWin</span><span style="color: #000000;">=</span><span style="color: #000000;">window.open(</span><span style="color: #000000;">''</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">_blank</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">''</span><span style="color: #000000;">);<br>
newWin.document.open(</span><span style="color: #000000;">'</span><span style="color: #000000;">text/html</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;">'</span><span style="color: #000000;">replace</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br>
newWin.opener</span><span style="color: #000000;">=</span><span style="color: #000000;"></span><span style="color: #0000ff;">null</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">testCode</span><span style="color: #000000;">=</span><span style="color: #000000;">document.getElementById(</span><span style="color: #000000;">"</span><span style="color: #000000;">txtTestCode</span><span style="color: #000000;">"</span><span style="color: #000000;">).value;<br>
newWin.document.write(testCode);<br>
newWin.document.close();<br>
}</span>
</div>

<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee;">
<span style="color: #008000;">/*****复制代码到粘贴板*********************/</span><br><span style="color: #0000ff;">function</span><span style="color: #000000;">copyCode(obj){<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">testCode</span><span style="color: #000000;">=</span><span style="color: #000000;">document.getElementById(</span><span style="color: #000000;">"</span><span style="color: #000000;">txtTestCode</span><span style="color: #000000;">"</span><span style="color: #000000;">).value;<br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">(copy2Clipboard(testCode)</span><span style="color: #000000;">!=</span><span style="color: #0000ff;">false</span><span style="color: #000000;">)<br>
{<br>
alert(</span><span style="color: #000000;">"</span><span style="color: #000000;">生成的代码已经复制到粘贴板,你可以使用Ctrl+V贴到需要的地方去了哦!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>
}<br>
}<br></span><span style="color: #008000;">//</span><span style="color: #008000;">很大的一陀是为了对firefox的兼容</span><span style="color: #008000;"><br></span><span style="color: #000000;">copy2Clipboard</span><span style="color: #000000;">=</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(txt){<br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">(window.clipboardData){<br>
window.clipboardData.clearData();<br>
window.clipboardData.setData(</span><span style="color: #000000;">"</span><span style="color: #000000;">Text</span><span style="color: #000000;">"</span><span style="color: #000000;">,txt);<br>
}</span><span style="color: #0000ff;">else</span><span style="color: #000000;"></span><span style="color: #0000ff;">if</span><span style="color: #000000;">(navigator.userAgent.indexOf(</span><span style="color: #000000;">"</span><span style="color: #000000;">Opera</span><span style="color: #000000;">"</span><span style="color: #000000;">)</span><span style="color: #000000;">!=-</span><span style="color: #000000;">1</span><span style="color: #000000;">){<br>
window.location</span><span style="color: #000000;">=</span><span style="color: #000000;">txt;<br>
}</span><span style="color: #0000ff;">else</span><span style="color: #000000;"></span><span style="color: #0000ff;">if</span><span style="color: #000000;">(window.netscape){<br></span><span style="color: #0000ff;">try</span><span style="color: #000000;">{<br>
netscape.security.PrivilegeManager.enablePrivilege(</span><span style="color: #000000;">"</span><span style="color: #000000;">UniversalXPConnect</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>
}</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">(e){<br>
alert(</span><span style="color: #000000;">"</span><span style="color: #000000;">您的firefox安全限制限制您进行剪贴板操作,请打开’about:config’将signed.applets.codebase_principal_support’设置为true’之后重试</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br></span><span style="color: #0000ff;">return</span><span style="color: #000000;"></span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br>
}<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">clip</span><span style="color: #000000;">=</span><span style="color: #000000;">Components.classes[</span><span style="color: #000000;">'</span><span style="color: #000000;">@mozilla.org/widget/clipboard;1</span><span style="color: #000000;">'</span><span style="color: #000000;">].createInstance(Components.interfaces.nsIClipboard);<br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">clip)<br></span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">trans</span><span style="color: #000000;">=</span><span style="color: #000000;">Components.classes[</span><span style="color: #000000;">'</span><span style="color: #000000;">@mozilla.org/widget/transferable;1</span><span style="color: #000000;">'</span><span style="color: #000000;">].createInstance(Components.interfaces.nsITransferable);<br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">trans)<br></span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br>
trans.addDataFlavor(</span><span style="color: #000000;">'</span><span style="color: #000000;">text/unicode</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">str</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">Object();<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">len</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">Object();<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">str</span><span style="color: #000000;">=</span><span style="color: #000000;">Components.classes[</span><span style="color: #000000;">"</span><span style="color: #000000;">@mozilla.org/supports-string;1</span><span style="color: #000000;">"</span><span style="color: #000000;">].createInstance(Components.interfaces.nsISupportsString);<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">copytext</span><span style="color: #000000;">=</span><span style="color: #000000;">txt;<br>
str.data</span><span style="color: #000000;">=</span><span style="color: #000000;">copytext;<br>
trans.setTransferData(</span><span style="color: #000000;">"</span><span style="color: #000000;">text/unicode</span><span style="color: #000000;">"</span><span style="color: #000000;">,str,copytext.length</span><span style="color: #000000;">*</span><span style="color: #000000;">2</span><span style="color: #000000;">);<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">clipid</span><span style="color: #000000;">=</span><span style="color: #000000;">Components.interfaces.nsIClipboard;<br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">clip)<br></span><span style="color: #0000ff;">return</span><span style="color: #000000;"></span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br>
clip.setData(trans,</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,clipid.kGlobalClipboard);<br>
}</span>
</div>

<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee;">
<span style="color: #008000;">/*****保存代码为html页面,非常遗憾的现阶段只支持IE******/</span><br><span style="color: #0000ff;">function</span><span style="color: #000000;">saveCode(obj){<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">newWin</span><span style="color: #000000;">=</span><span style="color: #000000;">window.open(</span><span style="color: #000000;">''</span><span style="color: #000000;">,</span><span style="color: #000000;">'</span><span style="color: #000000;">_blank</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;">'</span><span style="color: #000000;">top=10000</span><span style="color: #000000;">'</span><span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;">这里是个技巧,弹出的页面,虽然去不掉,但是我们可以让它向下移动到屏幕之外</span><span style="color: #008000;"><br></span><span style="color: #000000;">newWin.document.open(</span><span style="color: #000000;">'</span><span style="color: #000000;">text/html</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;">'</span><span style="color: #000000;">replace</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">testCode</span><span style="color: #000000;">=</span><span style="color: #000000;">document.getElementById(</span><span style="color: #000000;">"</span><span style="color: #000000;">txtTestCode</span><span style="color: #000000;">"</span><span style="color: #000000;">).value;<br>
newWin.document.write(testCode);<br>
newWin.document.execCommand(</span><span style="color: #000000;">'</span><span style="color: #000000;">saveas</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;">''</span><span style="color: #000000;">,</span><span style="color: #000000;">'</span><span style="color: #000000;">code.htm</span><span style="color: #000000;">'</span><span style="color: #000000;">);</span><span style="color: #008000;">//</span><span style="color: #008000;">firefox不兼容的主要原因就是因为ff不支持execCommand('saveas','','filename');</span><span style="color: #008000;"><br></span><span style="color: #000000;">newWin.close();<br>
}<br></span>
</div>
<br><h4>实例演示</h4>
<p>光说不练假把式,下面就是一个完整的例子。点击按钮试试效果吧。</p>

function runCode(){var newWin=window.open('',"_blank",'');newWin.document.open('text/html','replace');newWin.opener=null
var testCode=document.getElementById("txtTestCode").value;newWin.document.write(testCode);newWin.document.close();}
function saveCode(obj){var newWin=window.open('','_blank','top=10000');newWin.document.open('text/html','replace');var testCode=document.getElementById("txtTestCode").value;newWin.document.write(testCode);newWin.document.execCommand('saveas','','code.htm');newWin.close();}
function copyCode(obj){var testCode=document.getElementById("txtTestCode").value;if(copy2Clipboard(testCode)!=false)
{alert("生成的代码已经复制到粘贴板,你可以使用Ctrl+V 贴到需要的地方去了哦! ");}}
copy2Clipboard=function(txt){if(window.clipboardData){window.clipboardData.clearData();window.clipboardData.setData("Text",txt);}else if(navigator.userAgent.indexOf("Opera")!=-1){window.location=txt;}else if(window.netscape){try{netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");}catch(e){alert("您的firefox安全限制限制您进行剪贴板操作,请打开’about:config’将signed.applets.codebase_principal_support’设置为true’之后重试");return false;}
var clip=Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);if(!clip)
return;var trans=Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);if(!trans)
return;trans.addDataFlavor('text/unicode');var str=new Object();var len=new Object();var str=Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);var copytext=txt;str.data=copytext;trans.setTransferData("text/unicode",str,copytext.length*2);var clipid=Components.interfaces.nsIClipboard;if(!clip)
return false;clip.setData(trans,null,clipid.kGlobalClipboard);}}
<textarea id="txtTestCode" style="width: 532px; height: 198px;" rows="12" cols="18"> <!doctype html public "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="Keywords" content="YES!B/S!" />
<meta name="Description" content="This page is from http://Justinyoung.cnblogs.com" />
<title>CSS/Javascript demo</title>
</head>
<body>
<p>A testpage from<a href="http://justinyoung.cnblogs.com/" title="博客园Yes!B/S!博客">YES!B/S!</a></p>
</body>
</html>
</textarea><div style="clear: both;">
<input type="button" value="运行代码"><input type="button" value="复制代码"><input type="button" value="另存代码">
</div>

<h4>完整实例源码下载</h4>
<img alt="博客园实例源码下载" src="http://images.cnblogs.com/cnblogs_com/justinyoung/2007/broadcast.gif">点击下载图标下载<br><a title="博客园实例源码下载" href="http://files.cnblogs.com/JustinYoung/runCodeTest.rar" target="_blank"><img alt="博客园实例源码下载" src="http://images.cnblogs.com/cnblogs_com/justinyoung/common/000download.gif"></a>
<hr align="left" width="80%">
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值