Javascript 文件读取器和代码镜像加载文件复杂性
带预览的默认CodeMirror HTML编辑器-- 使用FileReader API在CodeMirror中加载文件- 下面是一个非常简单的例子,说明我正在尝试做什么。(保存功能不适用于这些在线编辑器,但导入文件功能适用于此简单编辑器)—— 我的问题是当我点击我的输入文件表单浏览文件时。我选择要打开的HTML文档,但它不会在CodeMirror中打开。我尝试了我所知道的一切,但都没有成功。有人能帮忙吗 HTML:Javascript 文件读取器和代码镜像加载文件复杂性,javascript,api,filereader,codemirror,Javascript,Api,Filereader,Codemirror,带预览的默认CodeMirror HTML编辑器-- 使用FileReader API在CodeMirror中加载文件- 下面是一个非常简单的例子,说明我正在尝试做什么。(保存功能不适用于这些在线编辑器,但导入文件功能适用于此简单编辑器)—— 我的问题是当我点击我的输入文件表单浏览文件时。我选择要打开的HTML文档,但它不会在CodeMirror中打开。我尝试了我所知道的一切,但都没有成功。有人能帮忙吗 HTML: <input type="file" onchange="loadfile
<input type="file" onchange="loadfile(this)">
var delay;
// Initialize CodeMirror editor
var editor = CodeMirror.fromTextArea(document.getElementById('code'), {
mode: 'text/html',
tabMode: 'indent',
lineNumbers: true,
lineWrapping: true,
autoCloseTags: true
});
// Live preview
editor.on("change", function() {
clearTimeout(delay);
delay = setTimeout(updatePreview, 300);
});
function updatePreview() {
var previewFrame = document.getElementById('preview');
var preview = previewFrame.contentDocument || previewFrame.contentWindow.document;
preview.open();
preview.write(editor.getValue());
preview.close();
}
setTimeout(updatePreview, 300);
function saveTextAsFile() {
var textToWrite = document.getElementById("code").value;
var textFileAsBlob = new Blob([textToWrite], {type:'text/plain'});
var fileNameToSaveAs = "myfile.html";
var downloadLink = document.createElement("a");
downloadLink.download = fileNameToSaveAs;
downloadLink.innerHTML = "Download File";
if (window.webkitURL != null)
{
// Chrome allows the link to be clicked
// without actually adding it to the DOM.
downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
}
else
{
// Firefox requires the link to be added to the DOM
// before it can be clicked.
downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
downloadLink.onclick = destroyClickedElement;
downloadLink.style.display = "none";
document.body.appendChild(downloadLink);
}
downloadLink.click();}
function destroyClickedElement(event) {
document.body.removeChild(event.target);}
function loadfile(input){
var reader = new FileReader()
reader.onload = function(e) {
editor.setValue = e.target.result;}
reader.readAsText(input.files[0]);}
var input = document.getElementById("select");
function selectTheme() {
var theme = input.options[input.selectedIndex].innerHTML;
editor.setOption("theme", theme);
}
var choice = document.location.search &&
decodeURIComponent(document.location.search.slice(1));
if (choice) {
input.value = choice;
editor.setOption("theme", choice);
}
完整代码
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>CodeMirror: HTML5 preview</title>
<script src='http://codemirror.net/lib/codemirror.js'></script>
<script src='http://codemirror.net/mode/xml/xml.js'></script>
<script src='http://codemirror.net/mode/javascript/javascript.js'></script>
<script src='http://codemirror.net/mode/css/css.js'></script>
<script src='http://codemirror.net/mode/htmlmixed/htmlmixed.js'></script>
<link rel='stylesheet' href='http://codemirror.net/lib/codemirror.css'>
<link rel='stylesheet' href='http://codemirror.net/doc/docs.css'>
<style type='text/css'>
.CodeMirror {
float: left;
width: 50%;
border: 1px solid black;}
iframe {
width: 49%;
float: left;
height: 300px;
border: 1px solid black;
border-left: 0px;}
</style>
</head>
<body>
<textarea id="code" name="code"><!doctype html>
<html>
<head>
<meta charset=utf-8>
<title>HTML5 canvas demo</title>
<style>p {font-family: monospace;}</style>
</head>
<body>
<p>Canvas pane goes here:</p>
<canvas id=pane width=300 height=200></canvas>
<script>
var canvas = document.getElementById('pane');
var context = canvas.getContext('2d');
context.fillStyle = 'rgb(250,0,0)';
context.fillRect(10, 10, 55, 50);
context.fillStyle = 'rgba(0, 0, 250, 0.5)';
context.fillRect(30, 30, 55, 50);
</script>
</body>
</html></textarea>
<iframe id="preview"></iframe>
<input type="file" onchange="loadfile(this)">
<a href="#my-header" onclick='saveTextAsFile()'>Save/Download</a>
<script>
var delay;
// Initialize CodeMirror editor
var editor = CodeMirror.fromTextArea(document.getElementById('code'), {
mode: 'text/html',
tabMode: 'indent',
lineNumbers: true,
lineWrapping: true,
autoCloseTags: true
});
// Live preview
editor.on("change", function() {
clearTimeout(delay);
delay = setTimeout(updatePreview, 300);
});
function updatePreview() {
var previewFrame = document.getElementById('preview');
var preview = previewFrame.contentDocument || previewFrame.contentWindow.document;
preview.open();
preview.write(editor.getValue());
preview.close();
}
setTimeout(updatePreview, 300);
function saveTextAsFile() {
var textToWrite = document.getElementById("code").value;
var textFileAsBlob = new Blob([textToWrite], {type:'text/plain'});
var fileNameToSaveAs = "myfile.html";
var downloadLink = document.createElement("a");
downloadLink.download = fileNameToSaveAs;
downloadLink.innerHTML = "Download File";
if (window.webkitURL != null)
{
// Chrome allows the link to be clicked
// without actually adding it to the DOM.
downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
}
else
{
// Firefox requires the link to be added to the DOM
// before it can be clicked.
downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
downloadLink.onclick = destroyClickedElement;
downloadLink.style.display = "none";
document.body.appendChild(downloadLink);
}
downloadLink.click();}
function destroyClickedElement(event) {
document.body.removeChild(event.target);}
function loadfile(input){
var reader = new FileReader();
reader.onload = function(e) {
document.getElementById('code').value = e.target.result;}
reader.readAsText(input.files[0]);}
var input = document.getElementById("select");
function selectTheme() {
var theme = input.options[input.selectedIndex].innerHTML;
editor.setOption("theme", theme);
}
var choice = document.location.search &&
decodeURIComponent(document.location.search.slice(1));
if (choice) {
input.value = choice;
editor.setOption("theme", choice);
}
</script>
</body>
</html>
CodeMirror:HTML5预览版
.CodeMirror{
浮动:左;
宽度:50%;
边框:1px纯黑;}
iframe{
宽度:49%;
浮动:左;
高度:300px;
边框:1px纯黑;
左边框:0px;}
HTML5画布演示
p{font-family:monospace;}
画布窗格位于此处:
var canvas=document.getElementById('pane');
var context=canvas.getContext('2d');
context.fillStyle='rgb(250,0,0)';
context.fillRect(10,10,55,50);
context.fillStyle='rgba(0,0250,0.5)';
context.fillRect(30,30,55,50);
无功延迟;
//初始化代码镜像编辑器
var editor=CodeMirror.fromTextArea(document.getElementById('code'){
模式:“text/html”,
tabMode:'缩进',
行号:对,
换行:对,
自动关闭标签:true
});
//现场预览
关于(“更改”,函数(){
清除超时(延迟);
延迟=设置超时(updatePreview,300);
});
函数updatePreview(){
var previewFrame=document.getElementById('preview');
var preview=previewFrame.contentDocument | | previewFrame.contentWindow.document;
preview.open();
preview.write(editor.getValue());
preview.close();
}
setTimeout(updatePreview,300);
函数saveTextAsFile(){
var textToWrite=document.getElementById(“代码”).value;
var textFileAsBlob=newblob([textToWrite],{type:'text/plain'});
var fileNameToSaveAs=“myfile.html”;
var downloadLink=document.createElement(“a”);
downloadLink.download=fileNameToSaveAs;
downloadLink.innerHTML=“下载文件”;
如果(window.webkitURL!=null)
{
//Chrome允许点击链接
//没有实际将其添加到DOM中。
downloadLink.href=window.webkitURL.createObjectURL(textFileAsBlob);
}
其他的
{
//Firefox要求将链接添加到DOM中
//在点击之前。
downloadLink.href=window.URL.createObjectURL(textFileAsBlob);
downloadLink.onclick=destroyClickedElement;
downloadLink.style.display=“无”;
document.body.appendChild(下载链接);
}
下载链接。单击();}
函数销毁ClickedElement(事件){
document.body.removeChild(event.target);}
函数加载文件(输入){
var reader=new FileReader();
reader.onload=函数(e){
document.getElementById('code')。value=e.target.result;}
reader.readAsText(input.files[0]);}
var输入=document.getElementById(“选择”);
函数selectTheme(){
var theme=input.options[input.selectedIndex].innerHTML;
编辑器.setOption(“主题”,主题);
}
var choice=document.location.search&&
decodeURIComponent(document.location.search.slice(1));
如果(选择){
输入值=选择;
编辑器.setOption(“主题”,选项);
}
你只是误用了CodeMirror;将文件内容加载到读卡器中时,不要将值
分配给textarea元素,例如:
reader.onload=函数(e){
document.getElementById('code')。value=e.target.result;
}
…使用CodeMirror API并通过编辑器实例setValue()
方法插入内容,如下所示:
reader.onload=函数(e){
编辑器.setValue(e.target.result);
}
请参阅,下面是说明这一点的示例。这里是示例
<script src="codemirror/lib/codemirror.js"></script>
<link rel="stylesheet" href="codemirror/lib/codemirror.css"/>
<script src="codemirror/mode/clike/clike1.js"></script>
<script src="codemirror/mode/javascript/javascript.js"></script>
<div id="editor"> </div>
<div>
<input type="file" onchange="localLoad(this.files);" />
</div>
<script>
var myCodeMirror = CodeMirror(
document.getElementById('editor'), {
lineNumbers: true
});
function localLoad(files) {
if (files.length == 1) {
document.title = escape(files[0].name);
var reader = new FileReader();
reader.onload = function(e) {
myCodeMirror.setValue(e.target.result);
};
reader.readAsText(files[0]);
}
}
</script>
TL;博士,请清楚地说明你的问题,你有什么问题?问题已经更新。解决这个问题的方法会非常有用。控制台上有错误吗?请更详细地说明Firebug的控制台中没有显示任何内容。CodeMirror没有读取/显示导入到textarea的值,但是它在没有CodeMirror的情况下工作,只是它自己。请创建一个实时演示来说明这一点,因为如果没有更多的信息,很难知道发生了什么(我相信我)。你可以这样做。哦,还有,请停止使用liveweave,,好吧,我收回我的第一条评论——liveweave已经好多了:)
<textarea id="editor" name="field1"></textarea>
<script>
var myCodeMirror = CodeMirror.fromTextArea
document.getElementById('editor'),{
lineNumbers: true
});
myCodeMirror.setSize(null, 600);
</script>