酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

//<script> (() => { const checkAdvanceFunc = async () => { const res = await runShellWithRoot('whoami') if (res.content) { if (res.content.includes('root')) { return true } } return false } const btn_enabled = document.createElement('button') btn_enabled.textContent = "安装🐱🐱" let disabled_btn_enabled = false btn_enabled.onclick = async (e) => { if (disabled_btn_enabled) return disable

你的代码整体逻辑清晰,功能完整,实现了安装与卸载 Clash 插件的核心流程。以下是一些优化建议和潜在问题点: --- ✅ 优点 1. 结构清晰:按钮事件绑定、异步操作处理得当。 2. 错误提示完善:每个步骤都有对应的 toast 提示,用户体验良好。 3. 安全性判断:使用 `checkAdvanceFunc()` 判断是否具备 root 权限。 --- 🛠️ 可以优化的点 1. 重复调用 checkAdvanceFunc() 你两次点击按钮都会重新执行 `checkAdvanceFunc()`,可以考虑在脚本加载时缓存一次权限状态,避免重复调用浪费资源。 ```js let hasRootAccess = null; const checkAdvanceFunc = async () => { if (hasRootAccess !== null) return hasRootAccess; const res = await runShellWithRoot('whoami'); hasRootAccess = res.content?.includes('root') ?? false; return hasRootAccess; } ``` 2. 路径硬编码 路径 `/data/clash`、`/sdcard/ufi_tools_boot.sh` 等多次出现,建议提取为常量变量,便于维护。 ```js const PATH_CLASH_DIR = '/data/clash'; const PATH_BOOT_SCRIPT = '/sdcard/ufi_tools_boot.sh'; ``` 3. 字符串拼接命令存在注入风险 虽然当前是内部使用,但如果你计划开放给更多用户或长期维护,建议对命令参数做一定校验,防止 shell 注入。 4. 未处理网络中断情况 下载阶段如果遇到断网等情况,没有重试机制,可以考虑增加一个简单的重试逻辑。 ```js async function downloadWithRetry(url, output, retries = 3) { for (let i = 0; i < retries; i++) { const res = await runShellWithRoot(`/data/data/com.minikano.f50_sms/files/curl -L ${url} -o ${output}`); if (res.success) return res; if (i < retries - 1) createToast(`第${i + 1}次下载失败,正在重试...`); } return { success: false }; } ``` 然后替换原来下载部分: ```js const res1 = await downloadWithRetry( 'https://pan.kanokano.cn/d/UFI-TOOLS-UPDATE/plugins/mihomo.zip', '/data/kano_clash.zip' ); ``` 5. Toast 输出日志信息过长 输出 `${res6.content}` 可能包含大量文本,影响页面渲染性能。建议截取前若干字符或只显示关键信息。 --- 🔍 其他注意事项(非代码问题) 1. 下载地址是否稳定?可否提供备用源? 2. 是否考虑支持配置文件自动更新? 3. 是否考虑加入 clash 内核版本检测及升级功能? --- 如果你希望我进一步封装成模块化函数或生成完整的独立插件安装脚本,请告诉我。 [2025-07-08 23:25:05 | AI写代码神器 | 664点数解答]

相关提问