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

news2024/11/19 5:52:26

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

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

<!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/prettier@2.7.1/standalone.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/prettier@2.7.1/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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2132762.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot+Vue+MySQL的热门网络游戏推荐系统

系统展示 用户前台界面 管理员后台界面 系统背景 基于SpringBootVueMySQL的热门网络游戏推荐系统&#xff0c;其背景主要源于当前网络游戏市场的蓬勃发展与用户需求的日益多样化。随着互联网的普及和技术的不断进步&#xff0c;网络游戏已成为人们休闲娱乐的重要方式之一。面对…

JAVA开源项目 校园管理系统 计算机毕业设计

本文项目编号 T 026 &#xff0c;文末自助获取源码 \color{red}{T026&#xff0c;文末自助获取源码} T026&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 管…

网络安全-intigriti-0422-XSS-Challenge Write-up

目录 一、环境 二、解题 2.1看源码 一、环境 Intigriti April Challenge 二、解题 要求&#xff1a;弹出域名就算成功 2.1看源码 我们看到marge方法&#xff0c;肯定是原型链污染题目 接的是传参&#xff0c;我们可控的点在于qs.config和qs.settings&#xff0c;这两个可…

逆向工程 反编译 C# net core

索引器访问 在您的代码中&#xff0c;您试图使用 configurationRoot.get_Item("AgileConfig:appId") 来访问配置项&#xff0c;但这里存在几个问题&#xff1a; 错误的访问方法&#xff1a;在 .NET 的 IConfigurationRoot 接口中&#xff0c;没有直接名为 get_Item 的…

python fastapi 打包exe

创建虚拟环境 python -m venv 国内依赖仓库 # 换源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip config set install.trusted-host mirrors.aliyun.com 安装nuitka pip install nuitka 生成exe nuitka --mingw64 --show-progress --s…

[000-01-008].第08节:Sentinel 环境搭建

1.Sentinel的构成&#xff1a; 核心库-后台默认的端口是8719控制台-前台默认的是8080端口 2.2.搭建Sentinel环境&#xff1a; a.下载Sentinel&#xff1a; 1.sentinel官方提供了UI控制台&#xff0c;方便我们对系统做限流设置。可以在GitHub下载 b.下载后运行Sentinel&#…

自动驾驶系列—掌握速度,驾驭安全,限速信息提醒功能(SLIF)介绍

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

心觉:收钱就像喝水一样简单,是如何做到的?

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作168/1000天 真的存在赚钱跟喝水一样简单的事情 这两天亲身体验过 某位做知识付费的大佬&#xff0c;昨天写一篇文章就哗哗哗的开…

导弹追踪问题:蒙特卡罗模拟+matlab代码

问题描述 蒙特卡罗模拟思想 采用微元法以直代曲的思想&#xff0c;假设一个个小时间段内&#xff0c;B船先走完一段直线距离后&#xff0c;导弹朝着两者连线方向走直线&#xff0c;这样若干条直线便近似拟合导弹轨迹。代码中判断碰撞的依据是A、B之间的距离小于某个阈值&#x…

JSON 数据 Excel 行转列

有如下JSON数据 [{id:1,name:小明,score:90}, {id:2,name:小李,score:89}, {id:3,name:小王,score:77}, {id:4,name:小刘,score:56}] 粘贴到 Excel 选中列-->数据tab-->分列 下一步 分隔符号-->其他【,】-->完成 CtrlF 替换-->全部替换 掉不要的字符为空 得…

代码随想录Day 43|leetcode题目:300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

提示&#xff1a;DDU&#xff0c;供自己复习使用。欢迎大家前来讨论~ 文章目录 动态规划Part10题目一&#xff1a;300.最长递增子序列解题思路&#xff1a; 题目二&#xff1a;674. 最长连续递增序列解题思路&#xff1a; 题目三&#xff1a; 718. 最长重复子数组解题思路滚动…

Radiance Field Learners As UAV First-Person Viewers 精读

1. 多尺度相机空间估计模块&#xff1a; 关键帧选择器&#xff1a;自动选择最具代表性的帧进行渲染&#xff0c;减少计算量&#xff0c;提高渲染效率。无人机轨迹预测&#xff1a;通过历史轨迹预测无人机的未来位置&#xff0c;确保实时视角调整&#xff0c;提高无人机导航的准…

云渲染与AI渲染分别是什么?两者的优势对比

云渲染和AI渲染是两种先进的渲染技术&#xff0c;它们各自具有独特的优势和应用场景。下面针对两种情况来简单说明下。 1、云渲染&#xff1a; - 定义&#xff1a;云渲染是一种利用远程服务器(云端)来处理和生成渲染效果的技术。它允许用户将计算密集型的任务转移到云端&#…

[论文笔记] CSFCN

摘要 上下文建模或多级特征融合方法已被证明可以有效提高语义分割性能。 然而&#xff0c;它们并不是专门处理像素上下文不匹配和空间特征不对齐的问题&#xff0c;并且高计算复杂度阻碍了它们在实时场景中的广泛应用。 在这项工作中&#xff0c;我们提出了一种轻量级的上下文…

8.第二阶段x86游戏实战2-实现瞬移

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…

【C++11 —— 包装器】

C11 —— 包装器 包装器function包装器function包装器介绍function包装器统一类型function包装器的意义 bind包装器bind包装器介绍bind包装器绑定固定参数bind包装器调整传参顺序bind包装器的意义 包装器 function包装器 function包装器介绍 function包装器 也叫作适配器。C…

【Go】使用Goland创建第一个Go项目

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

go-zero的快速实战(完整)

微服务框架 go-zero 的基本介绍 go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性&#xff0c;经受了充分的实战检验。 go-zero 中的 api&#xff0c;rpc&#xff0c;数据库等涉及的代码&#xff0c;都可以给我们一键生成&#…

计算机毕业设计 自习室座位预约系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

RTC、ADC

RTC RTC&#xff08;Real-Time Clock&#xff09;是实时时钟模块&#xff0c;用于跟踪实际时间&#xff08;年、月、日、时、分、秒&#xff09;&#xff0c;即使在系统断电或处于低功耗模式下也能保持时间的准确性。 特点 时间和日期跟踪低功耗模式支持可编程闹钟和定时器备…