首页 > 编程语言 >【工具】前端JavaScript代码在线执行器 方便通过网页 手机测试js代码

【工具】前端JavaScript代码在线执行器 方便通过网页 手机测试js代码

时间:2024-09-14 18:27:29浏览次数:16  
标签:执行器 function const 补全 代码 JavaScript createElement outputDiv document


【工具】前端JavaScript代码在线执行器 方便通过网页 手机测试js代码

  1. 自动补全
  2. js代码格式化
  3. 代码色彩
  4. 打印日志
  5. 清空日志
  6. 待补充

【工具】前端JavaScript代码在线执行器 方便通过网页 手机测试js代码_开发语言

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JS执行器</title>
    <!-- 引入 CodeMirror 的 CSS -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.9/codemirror.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.9/theme/material-darker.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.9/addon/hint/show-hint.min.css">
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }
        button {
            margin-top: 10px;
            padding: 10px 20px;
            font-size: 16px;
            cursor: pointer;
        }
        #output {
            margin-top: 20px;
            padding: 10px;
            border: 1px solid #ccc;
            background-color: #f9f9f9;
            white-space: pre-wrap;
            height: 400px; /* 提高日志区域高度 */
            overflow-y: scroll;
        }
        .CodeMirror {
            border: 1px solid #ccc;
            height: 400px; /* 调高默认高度 */
        }
        .collapsible {
            cursor: pointer;
            background-color: #f9f9f9;
            border: none;
            outline: none;
            text-align: left;
            padding: 5px;
            width: 100%;
        }
        .collapsible:after {
            content: '\25BC'; /* Arrow down */
            float: right;
        }
        .collapsible.active:after {
            content: '\25B2'; /* Arrow up */
        }
        .content {
            padding: 0 18px;
            display: none;
            overflow: hidden;
            background-color: #f1f1f1;
        }
        .log-time {
            font-size: 0.9em;
            color: gray;
        }
    </style>
</head>
<body>

    <h1>JavaScript 执行器</h1>
    
    <textarea id="codeInput" placeholder="在此输入JavaScript代码..."></textarea>
    <button onclick="executeCode()">执行代码</button>
    <button onclick="formatCode()">格式化代码</button>
    <button onclick="clearLogs()">清空日志</button>
    <button onclick="triggerAutocomplete()">触发自动补全</button> <!-- 新增手动触发补全按钮 -->
    
    <div id="output"></div>

    <!-- 引入 CodeMirror 和 JavaScript 解析器 -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.9/codemirror.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.9/mode/javascript/javascript.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.9/addon/edit/closebrackets.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.9/addon/hint/show-hint.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.9/addon/hint/javascript-hint.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/standalone.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/parser-babel.js"></script>

    <script>
        // 初始化 CodeMirror 文本编辑器
        const editor = CodeMirror.fromTextArea(document.getElementById('codeInput'), {
            lineNumbers: true,
            mode: 'javascript',
            theme: 'material-darker',
            autoCloseBrackets: true,
            extraKeys: {
                "Ctrl-Space": "autocomplete",
                "Alt-Space": "autocomplete" // 在移动设备上尝试不同的键触发补全
            }
        });

        // 自动补全提示功能
        editor.on('inputRead', function(cm) {
            if (!cm.state.completionActive) { // 如果没有激活补全
                CodeMirror.commands.autocomplete(cm); // 主动触发补全
            }
        });

        // 重定向 console 方法到页面上
        (function() {
            const outputDiv = document.getElementById('output');

            const methods = ['log', 'info', 'warn', 'error'];
            
            methods.forEach(method => {
                const original = console[method];
                console[method] = function(...args) {
                    const logItem = document.createElement('div');
                    
                    const timestamp = document.createElement('span');
                    timestamp.className = 'log-time';
                    timestamp.textContent = `[${new Date().toLocaleTimeString()}] `;
                    logItem.appendChild(timestamp);

                    args.forEach(arg => {
                        if (typeof arg === 'object') {
                            logItem.appendChild(createCollapsibleObject(arg));
                        } else {
                            logItem.textContent += `[${method.toUpperCase()}] ` + arg + '\n';
                        }
                    });

                    outputDiv.appendChild(logItem);
                    outputDiv.scrollTop = outputDiv.scrollHeight; // 保持滚动条在最底部
                    original.apply(console, args);
                };
            });
        })();

        // 创建折叠对象的函数
        function createCollapsibleObject(obj) {
            const btn = document.createElement('button');
            btn.className = 'collapsible';
            btn.textContent = 'Object';

            const contentDiv = document.createElement('div');
            contentDiv.className = 'content';

            const pre = document.createElement('pre');
            pre.textContent = JSON.stringify(obj, null, 2);
            contentDiv.appendChild(pre);

            btn.addEventListener('click', function() {
                this.classList.toggle('active');
                contentDiv.style.display = contentDiv.style.display === 'block' ? 'none' : 'block';
            });

            const wrapper = document.createElement('div');
            wrapper.appendChild(btn);
            wrapper.appendChild(contentDiv);

            return wrapper;
        }

        // 执行代码函数
        function executeCode() {
            const code = editor.getValue();
            const outputDiv = document.getElementById('output');
            try {
                eval(code); // 执行代码
            } catch (error) {
                const errorLog = document.createElement('div');
                errorLog.textContent = '错误: ' + error.message;
                outputDiv.appendChild(errorLog);
            }
        }

        // 格式化代码函数
        function formatCode() {
            const unformattedCode = editor.getValue();
            try {
                const formattedCode = prettier.format(unformattedCode, {
                    parser: "babel", // 使用 babel 解析器处理 JavaScript
                    plugins: prettierPlugins
                });
                editor.setValue(formattedCode);
            } catch (error) {
                console.error('格式化错误:', error.message);
            }
        }

        // 清空日志函数
        function clearLogs() {
            const outputDiv = document.getElementById('output');
            outputDiv.innerHTML = ''; // 清空日志内容
        }

        // 手动触发自动补全的函数
        function triggerAutocomplete() {
            CodeMirror.commands.autocomplete(editor);
        }
    </script>

</body>
</html>

标签:执行器,function,const,补全,代码,JavaScript,createElement,outputDiv,document
From: https://blog.51cto.com/u_14976802/12018153

相关文章

  • stm32驱动HX711称重传感器 c++代码分享
    一、HX711模块介绍HX711模块是一种专门用于称重传感器的放大器模块。它的主要功能是将测得的微小电压信号放大到可以被微控制器读取的范围。HX711模块通常配合称重传感器一起使用,例如压力传感器、负载细胞等。它采用24位的模数转换器(ADC)来精确测量传感器的电压变化。HX711模块具......
  • JAVA毕业设计171—基于Java+Springboot+vue3+小程序的宠物店小程序系统(源代码+数据库
    毕设所有选题:https://blog.csdn.net/2303_76227485/article/details/131104075基于Java+Springboot+vue3+小程序的宠物店小程序系统(源代码+数据库)171一、系统介绍本项目前后端分离(可以改为ssm版本),分为用户、店员、管理员三种角色1、用户:注册、登录、宠物购买(评论......
  • JAVA毕业设计174—基于Java+Springboot+vue3+小程序的农产品社区团购小程序系统(源代
    毕设所有选题:https://blog.csdn.net/2303_76227485/article/details/131104075基于Java+Springboot+vue3+小程序的农产品社区团购小程序系统(源代码+数据库+开题+万字论文)174一、系统介绍本项目前后端分离(可以改为ssm版本),分为用户、管理员两种角色1、用户:注册、登......
  • 数字OA——低代码开发平台范赋能企业设计与探索
    在数字化转型的浪潮中,企业面临着快速适应市场变化和提高业务效率的双重挑战。传统的软件开发方式往往耗时长、成本高,难以满足企业敏捷开发的需求。低代码开发平台应运而生,它通过提供可视化的开发环境和丰富的组件库,极大地降低了应用开发的门槛,加速了软件交付周期。本文将围绕JN......
  • git命令使用详解——帮你应对各种代码管理情况
        日程使用git,不出错的时候gitpull、gitadd、gitcommit、gitpush、gitrebase等命令,就能覆盖绝大多数工作场景了。但是,实际工作中会遇到些让我们十分棘手的情况,这时候就需要一些不常用但不可少的git命令了,接下来为大家详细介绍下各种git命令:一、初始化仓库......
  • [Python数据采集]Playwright爬虫数据采集代码示例!!值得深入学习代码
    【Playwright爬虫数据采集代码示例!!值得深入学习代码】为了提高反爬虫的稳定性,代理池和模拟真实用户行为是常见的优化手段。以下我将给出代理池的实现方式,并结合模拟真实用户行为的代码示例。1.代理池实现:通过代理池,可以定期切换IP,避免因同一个IP频繁请求而被封锁。代理池可......
  • AI带货直播插件的五大基础功能和源代码!
    随着人工智能技术的飞速发展,AI带货直播插件已成为电商领域的重要工具,这类插件通过集成先进的人工智能技术,不仅提升了直播的效率和互动性,还大大增强了用户体验和转化率。一、AI带货直播插件的五大基础功能1、自动化内容生成:a、利用深度学习算法,自动生成直播内容,如文本、图像和视频。......
  • 自尽氚气出题人+rui 之 氚荠甲苯二酸 代码
    运输计划显然我们可以处理出每个区间正方向和反方向走的代价,那么最后的问题可以转化为每个点选择\(0/1\)之一,要求区间的选择两两不冲突,在这个基础上最小化代价之和。则,可以参考\(2-SAT\)的思路,处理出每个点选择\(0/1\)两两的限制状况,不难发现这种限制应该是对称的,而且有一......
  • ubuntu下stlink烧录stm32代码
    ubuntu下stlink烧录stm32代码,记录备忘0、环境一、下载stlink驱动 二、编译  三、安装stlink驱动 四、验证安装成功 usb口接stlink后,查到设备五、烧录 六、其它  ......
  • 企业源代码怎么加密防泄密?2024十款好用的源代码加密软件
    在当今数字化和信息化的时代,企业的源代码通常承载了核心技术和商业机密,若被泄露或窃取,可能导致企业遭受不可估量的损失。为防止源代码泄密,企业需要采取多层次的安全措施,其中源代码加密是最关键的一环。1.安秉源代码加密安秉源代码加密软件是一款适用于Windows和Linux平台的......