如何加载一个编辑器
How to load ace editor
我正在尝试使用Ace代码编辑器库(http://ace.ajax.org/),但我遇到了麻烦。根据嵌入指南,这应该从amazon CDN加载所需的js文件。
<script src="http://d1n0x3qji82z53.cloudfront.net/src-min-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>
然而它失败了,在chrome控制台显示:
Could not load worker ace.js:1
DOMException {message: "SecurityError: DOM Exception 18", name: "SecurityError", code: 18, stack: "Error: An attempt was made to break through the se…cloudfront.net/src-min-noconflict/ace.js:1:76296)", INDEX_SIZE_ERR: 1…}
ace.js:1
我还尝试将ace库src-min文件夹放在本地并加载
<script src="/js/ace/ace.js" type="text/javascript" charset="utf-8"></script>
也失败了,错误如下:
Uncaught RangeError: Maximum call stack size exceeded
GET http://mysite/mode-javascript.js 404 (Not Found) 123f2c9_ace_1.js:1
GET http://mysite/notes/theme-monokai.js 404 (Not Found) 123f2c9_ace_1.js:1
Uncaught RangeError: Maximum call stack size exceeded
最后我尝试加载所有的js资源在ace src-min文件夹,这也失败了错误:S
我无法将所有代码粘贴到注释中,所以我将通过更新这一个开始回答您的问题。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>HTML</title>
<style>
#editor {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
</style>
</head>
<body>
<div id="editor">
function foo(items) {
var x = "All this is syntax highlighted";
return x;
}
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.6/ace.js" type="text/javascript" charset="utf-8"></script>
<script>
var editor = ace.edit("editor");
editor.setTheme("ace/theme/monokai");
editor.getSession().setMode("ace/mode/javascript");
</script>
</body>
</html>
你能在你这边测试一下,看看你是否还能找到问题吗?如果这段代码(单数)没有问题,可能是其他JavaScript影响了ACE。
这是一个JSfiddle: http://jsfiddle.net/yDscY/。在我的开发检查器中没有错误。
我发现问题了。如果你有PHP或者可以用。htaccess。你必须发送特定的头来遵守CORS(跨域资源共享)。
access-control-allow-origin: *
access-control-allow-credentials: true
在此之后,它应该工作。
更新
我没有彻底测试这部分,但它应该可以工作。
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Credentials: "true"
</IfModule>
祝你好运!
正确答案在第一条注释中:
试试这个editor.getSession().setUseWorker(false);看看它是否仍然失败。本地不能工作,因为它依赖于其他在线相关文件。这就是相对GET失败的原因。我不是使用第一个联机链接时出现任何错误。也许一些否则会打断你的javascript?你能展示一个更完整的版本吗你的HTML/JS文件?
- Allendar , 14章25条的3月24日在
我在尝试完成这项工作时遇到了麻烦。在ACE主页上给出的代码不适合我。我所有的文件都在本地目录,但如果你愿意,你可以使用CDN代替。
我把ace目录从lib/ace
放入我的static/
目录。将该部分更改为您自己的位置。
我必须使用Require.js api来加载ace。这是为我工作的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<title>ACE in Action</title>
<style type="text/css" media="screen">
#editor {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
</style>
</head>
<body>
<div id="editor">
function foo(items) {
var x = "All this is syntax highlighted";
return x;
}
</div>
<script type="text/javascript" src="/static/require.js"></script>
<script>
require.config({
baseUrl: window.location.protocol + "//" + window.location.host
+ window.location.pathname.split("/").slice(0, -1).join("/"),
paths: {
ace: "/static/ace"
}
});
require(["ace/ace"], function (ace) {
var editor = ace.edit("editor");
editor.setTheme("ace/theme/monokai");
editor.getSession().setMode("ace/mode/javascript");
});
</script>
</body>
</html>
来源:https://github.com/ajaxorg/ace/issues/1017
如果您遇到一些疯狂的错误,请检查此页面:http://requirejs.org/docs/errors.html
我知道这不能完全回答你的问题,但我写这篇文章是为了那些登陆这个页面并有同样问题的人,
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Credentials: "true"
</IfModule>
或
editor.getSession().setUseWorker(false);
不工作。
我在Chrome上有同样的问题。我在火狐和Opera上测试了我的网站,结果和预期的一样。加载页面时,我一直得到Uncaught RangeError: Maximum call stack size exceeded
错误。
解决方案是清空Chrome的缓存,它再次工作。即使是control/command + shift + r
或control + F5
也不行。我不得不进入设置并清空缓存
- 一个页面上有多个Ace编辑器,没有预先设置元素
- 我在Phaser有一个项目.我想在画布上的元素上做一个用户图像编辑器
- 如何在一个页面中使用多个markDown编辑器
- 当我单击另一个文件时,如何在 ace 编辑器中更改内容
- 如何取消粗体文本?一个小小的所见即所得的编辑器
- 未捕获的类型错误: $(..).froala编辑器不是一个函数//解决方案被找到,但不确定如何使用它
- 另一个就地编辑器 - 一个jQuery就地编辑插件
- 当一个文件超过20000行时,您使用的是哪个编辑器或IDE
- 制作一个在线HTML编辑器
- 如何使用TinyMCE文本区域编辑器作为一个类
- 我可以在 dijit 编辑器中放置一个 iframe 吗?
- Sencha ExtJS 4.2:如何在一个网格中同步两个组合编辑器
- 如何限制用户在ui ace编辑器中只能编写一个javascript函数(方法)
- 如何构建一个轻量级的在线文本编辑器
- 如何在DojoGridX的单元格编辑器中根据另一个单元格的值过滤select组件的选项
- 文本编辑器插件,允许数据与另一个插件交互
- 如果tinyMCE编辑器是空白的,我该如何通过在其旁边附加一个字符串来验证它
- 如何在网页中实现一个可以突出显示LaTeX和AMS关键字的编辑器
- 在PyQT QWebkit中嵌入一个TinyMCE编辑器
- 我如何用一个插件添加多个按钮到我的WordPress帖子编辑器