ace.js实现一个在线代码编辑器
https://www.w3cschool.cn/tryrun/runcode?lang=javascript
https://ace.c9.io/build/kitchen-sink.html
背景
项目需要,在一些场景,用户需要手动编写一些js脚本来实现自己的功能;前期一直用文本框显示,不便于编辑和查看。因此需要引入一个在线代码编辑器。效果如下:

ACE简介:
ACE是一个开源的、独立的、基于浏览器的代码编辑器,可以嵌入到任何web页面或JavaScript应用程序中。ACE支持超过40种语言语法高亮,缩进,代码提示功能且具有大量的主题;并能够处理代码多达404万行的大型文档。ACE开发团队称,ACE在性能和功能上可以媲美本地代码编辑器(如SublimeText、TextMate和Vim等)。
官方网址:https://ace.c9.io
Github地址:https://github.com/ajaxorg/ace
支持语言:java、javascript、json、jsp、markdown、mysql、nginx...
功能实现
1、引入js
方式一:下载源码
下载地址1:https://github.com/ajaxorg/ace-builds/
- <!-- 代码编辑ace.js 本地-->
- <script src="../js/ace/src-min/ace.js" type="text/javascript"></script>
- <script src="../js/ace/src-min/ext-language_tools.js" type="text/javascript"></script>
方式二: 引用在线的
bootstrap中文网提供的cdn服务;http://www.bootcdn.cn/
- <!-- 代码编辑ace.js 远程 -->
- <script src="http://cdn.bootcss.com/ace/1.2.4/ace.js"></script>
- <script src="http://cdn.bootcss.com/ace/1.2.4/ext-language_tools.js"></script>
2、添加控件
- <pre id="codeEditor" class="ace_editor" style="min-height:320px">
- <s:textarea class="ace_text-input" cssStyle="width:97.5%;height:320px;"/>
- </pre>
3、初始化组件
- //初始化代码编辑器
- function initEditor(){
- //获取控件 id :codeEditor
- editor = ace.edit("codeEditor");
- //设置风格和语言(更多风格和语言,请到github上相应目录查看)
- theme = "monokai";
- //theme = "terminal";
- //语言
- language = "javascript";
- editor.setTheme("ace/theme/" + theme);
- editor.session.setMode("ace/mode/" + language);
- //字体大小
- editor.setFontSize(15);
- //设置只读(true时只读,用于展示代码)
- editor.setReadOnly(false);
- //自动换行,设置为off关闭
- editor.setOption("wrap", "free");
- //启用提示菜单
- ace.require("ace/ext/language_tools");
- editor.setOptions({
- enableBasicAutocompletion: true,
- enableSnippets: true,
- enableLiveAutocompletion: true
- });
- }
4、保存时代码语法检测
(正常情况下,输入的代码存在语法错误时会有红色叉号提示;由于本项目中的代码会多达几百行,所以,在保存时需要获取一下编辑的的语法校验结果,存在异常时给出提示。)
- //获取编辑器中语法校验的结果
- var annotations = editor.getSession().getAnnotations();
- //错误
- var error="";
- var errorNum=0;
- //警告
- var warning="";
- var warningNum=0;
- //遍历结果 记录提示信息
- for(var aid = 0, alen = annotations.length; aid < alen; ++aid) {
- var row=annotations[aid].row+1;
- //存在错误 必须修改
- if(annotations[aid].type === 'error') {
- var txt=" 行:"+row+";列:"+annotations[aid].column+"; 提示:"+annotations[aid].text;
- error+=txt+"<br>";
- errorNum++;
- }
- //存在警告 可以不修改
- if(annotations[aid].type === 'warning'||annotations[aid].type === 'info') {
- var txt=" 行:"+row+";列:"+annotations[aid].column+"; 提示 : "+annotations[aid].text;
- warning+=txt+"<br>";
- warningNum++;
- }
- }
- //存在错误 必须修改
- if( error!="") {
- }else {
- //存在警告 可以不修改
- if(warning!="") {
- }
- }
5、效果图:
存在语法错误时(当语法存在错误时,会有红色叉号或黄色叹号,把鼠标放上去会显示提示信息): 
正常时:

在线效果可参考: https://www.w3cschool.cn/tryrun/runcode?lang=javascript
6、官网在线测试:
https://ace.c9.io/build/kitchen-sink.html
基本所有的效果都可以在这测试,很方便。

7、遇到的一些问题:
1、可校验错误数默认为50个;当超过100多行时或者错误过多少时,之后的代码无法校验语法。所以下载了源码,源码中的错误检测数量(只是js其他的不清楚)。这里js的语法校验时引用了另一个插件 jshint插件;在引用时会有个初始化,初始化里有个参数是maxerr 由默认的50改为10000。 https://www.w3cschool.cn/tryrun/runcode?lang=javascript 也存在这个问题。
ace.js实现一个在线代码编辑器的更多相关文章
- Js的在线代码编辑器:CodeMirror
github地址:https://github.com/codemirror/CodeMirror/tree/master/demo 里面包含需要的js.css文件以及大量的示例 官网:https:/ ...
- JS在线代码编辑器多种方案monaco-editor,vue-monaco-editor
前言 JavaScript在线代码编辑器. 需要代码提示,关键字高亮,能够格式化代码.(不需要在线运行) 简简单单的需求. 方案一: Monaco-editor 简介:微软的开源项目,开源中国上面的在 ...
- (视频) 《快速创建网站》 3.2 WordPress多站点及Azure在线代码编辑器 - 扔掉你的ftp工具吧,修改代码全部云端搞定
本文是<快速创建网站>系列的第6篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 访问本系列目录,请点击:http://devopshub.cn/tag ...
- 20个最强的基于浏览器的在线代码编辑器 - OPEN资讯
20个最强的基于浏览器的在线代码编辑器 - OPEN资讯 20个最强的基于浏览器的在线代码编辑器
- ACE Editor在线代码编辑器简介及使用引导
转自博客:https://www.cnblogs.com/cz-xjw/p/6476179.html ACE 是一个开源的.独立的.基于浏览器的代码编辑器,可以嵌入到任何web页面或JavaScrip ...
- CodeMirror在线代码编辑器使用
CodeMirror官网地址为:https://codemirror.net/ CodeMirror作为一款代码编辑器,其应用场景主要是在线网站写代码.如现在的leetcode.洛谷.code-vs等 ...
- 在线代码编辑器CodeMirror简介
1.什么是Code Mirror 最近做一个项目需要在网页上实现一个代码编辑器,支持语法高亮.自动缩进.智能提示等功能.发现Code Mirror刚好满足所有需求.Code Mirror是由js写的一 ...
- 在线代码编辑器 Codemirror 的轻量级 React 组件
代码编辑器 CodeMirror 的轻量级 React 组件 demo @uiw-react.github.io/react-codemirror/ 特性:
- CodeMirror 在线代码编辑器
像百度编辑器插件部分.菜鸟教程示例等高德地图都在使用,这里也记录一下: CodeMirror是一个用于编辑器文本框textarea代码高亮javascript插件...... vue 中使用 参见:h ...
- 集成代码编辑器ACE的经验
ACE是最流行的在线代码编辑器之一,在CanTK的集成开发环境GameBuilder里也使用了ACE.ACE的功能非常强大,但是由于使用方法不当,大家反映GameBuilder的代码编辑器不好用.最近 ...
随机推荐
- 题解:P1032 [NOIP 2002 提高组] 字串变换
题目链接:link. 为了高效地解决这道题目,我们考虑使用双向搜索解决. 我们从 \(A\) 和 \(B\) 同时开始搜索,要是中间有相遇,那么就说明 \(A\) 能变成 \(B\) 这样我们就结束搜 ...
- ArkUI-X构建Android平台AAR及使用
本教程主要讲述如何利用ArkUI-X SDK完成Android AAR开发,实现基于ArkTS的声明式开发范式在android平台显示.包括: 1.跨平台Library工程开发介绍 2.AAR在And ...
- CS与BS架构
CS/BS C/S和B/S都是互联网中常见的网络结构模型. (1)什么是C/S模型 C/S模型指的是客户端/服务器模型,是一种计算机系统架构模式,其中系统功能被划分为客户端和服务器两个独立的部分,它们 ...
- ArkUI-X案例解析
目前,已经有按照方案完成整体改造的4个Sample作为完整案例. 应用描述 链接 鸿蒙世界 HMOSWorld 溪村小镇 OxHornCampus 音乐专辑 MusicHome 购物应用 MultiS ...
- webFlux入门
今天发现一个特别好的文章,是关于springBoot框架中响应式编程的,那下面就是这位博主所整理的一些干货 ---------------------------------------------- ...
- MCPmarket.cn最全最好用的中文MCP平台:推出全新MCP教程《MCP从0到1》第1课:MCP关键概念与术语详解
MCPmarket.cn 正式推出全新教程<MCP 从 0 到 1>,面向AI爱好者和开发者朋友,零基础友好,帮你系统掌握 MCP(Model Context Protocol,模型上下文 ...
- Stack Overflow,轰然倒下!
你好呀,我是歪歪. 前几天看到一个让我感慨万千的走势图: 本来想让你猜一猜这个走势图的内容是什么的. 但是结合标题你应该也能猜到了,和 Stack Overflow 有关. 这个走势图的数据是 Sta ...
- .Net 6 的类库中添加 IWebHostEnvironment 接口类时找不到
通过添加 Microsoft.AspNetCore.Hosting.Abstractions.dll 包是没有效果的 需要添加的包叫做:MiniProfiler.AspNetCore.Mvc
- ETL数据集成丨将DB2数据同步至Postgres数仓实践
随着企业数字化转型的加速,数据已成为企业的重要资产.为了更好地挖掘数据价值,企业纷纷建立自己的数据仓库,以便于数据分析和决策.在众多数据库中,DB2和Postgres作为两款备受欢迎的数据库,如何实现 ...
- 生活-家电: 论“内卷文化” + 品牌 VS 品质:记一起“知名品牌” 的退货经历(因 “商品设计缺陷”)
论"内卷文化" 如有不对欢迎指正. 起初,我也不知道"什么是内卷",面对现象级的"内卷文化"兴起, 各地"卷王不断", ...