如何加载ace编辑器

Ben*_*awk 18 html javascript cdn code-editor

我正在尝试使用Ace代码编辑器库(http://ace.ajax.org/),但我遇到了麻烦.根据嵌入指南,这应该从Amazons CDN加载所需的js文件.

<script src="http://d1n0x3qji82z53.cloudfront.net/src-min-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>
Run Code Online (Sandbox Code Playgroud)

然而它失败了,在Chromes控制台中显示:

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
Run Code Online (Sandbox Code Playgroud)

我还尝试在本地放置ace库src-min文件夹并加载它

<script src="/js/ace/ace.js" type="text/javascript" charset="utf-8"></script>
Run Code Online (Sandbox Code Playgroud)

哪个也失败了错误:

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
Run Code Online (Sandbox Code Playgroud)

最后,我尝试加载ace src-min文件夹中的所有js资源,该文件夹也因错误而失败:S

小智 9

我无法将所有代码粘贴到评论中,因此我将通过更新此问题开始回答您的问题.这对我来说很好:

<!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>
Run Code Online (Sandbox Code Playgroud)

你可以在最后测试一下,看看你是否仍然遇到问题?如果这个代码(单数)没问题,可能是其他一些JavaScript会影响ACE.

这是一个JSfiddle:http://jsfiddle.net/yDscY/.我的开发检查员没有错误.

我发现了这个问题.如果你有PHP或者可以使用.htaccess.您必须发送特定标头以符合CORS(跨源资源共享).

access-control-allow-origin: *
access-control-allow-credentials: true
Run Code Online (Sandbox Code Playgroud)

之后它应该工作.

更新

我没有彻底测试这部分,但它应该工作.

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Allow-Credentials: "true"
</IfModule>
Run Code Online (Sandbox Code Playgroud)

祝好运!