cancorteaw-app:Expo 和 React Native 应用运行器 - Openclaw Skills

作者:互联网

2026-04-05

AI教程

什么是 cancorteaw-app?

cancorteaw-app 是一款为使用 Openclaw Skills 的开发人员设计的强大技能,用于管理 Expo 和 React Native 项目的全生命周期。它作为 appctl 工具的一个受控包装器,确保应用程序创建、屏幕生成和 Web 预览都在安全的沙箱环境中执行。通过将执行限制在白名单脚本和目录集中,它提供了一种安全且强大的方式来迭代移动应用程序。

该技能自动化了与设置新项目和添加 UI 组件相关的样板代码。无论您是快速原型化一个新想法,还是管理多个本地移动 Web 预览,cancorteaw-app 通过标准化依赖项处理和过程监控方式,确保您的 Openclaw Skills 工作流程的一致性。

下载入口:https://github.com/openclaw/skills/tree/main/skills/cancorleone/cancorteaw-app

安装与下载

1. ClawHub CLI

从源直接安装技能的最快方式。

npx clawhub@latest install cancorteaw-app

2. 手动安装

将技能文件夹复制到以下位置之一

全局模式 ~/.openclaw/skills/ 工作区 /skills/

优先级:工作区 > 本地 > 内置

3. 提示词安装

将此提示词复制到 OpenClaw 即可自动安装。

请帮我使用 Clawhub 安装 cancorteaw-app。如果尚未安装 Clawhub,请先安装(npm i -g clawhub)。

cancorteaw-app 应用场景

  • 在非交互模式下使用 create-expo-app 快速脚手架化新的 Expo 项目。
  • 向现有的 React Native 项目添加新的 TypeScript 屏幕并自动提交 git。
  • 在特定端口上运行移动应用的本地 Web 预览以进行测试和演示。
  • 监控 Openclaw Skills 内活动开发服务器的运行时状态和日志。
cancorteaw-app 工作原理
  1. 用户发起 new 或 preview 等命令,调用白名单中的 appctl 脚本。
  2. 对于新项目,该技能在 /home/patron/apps/ 下初始化一个目录并搭建 React Native 环境。
  3. 该技能通过将 .tsx 文件写入相应的项目子目录来管理屏幕创建。
  4. 预览时,它启动一个绑定到本地环回地址的 Expo Web 服务器,并跟踪进程 ID 和端口。
  5. 状态检查验证 PID 是否处于活动状态,并为 Openclaw Skills 用户返回相应的本地 URL。

cancorteaw-app 配置指南

要在您的 Openclaw Skills 设置中使用此技能,请确保 appctl 二进制文件位于 /home/patron/apps/_bin/appctl。然后您可以通过 CLI 与其交互:

# 创建新应用
new my-mobile-project

# 添加屏幕
add-screen my-mobile-project Settings "User Settings"

# 在自定义端口启动预览
EXPO_PORT=8080 preview my-mobile-project

cancorteaw-app 数据架构与分类体系

cancorteaw-app 在严格的目录层次结构中组织数据,以保持 Openclaw Skills 内部的隔离:

路径 描述
/home/patron/apps/ Expo 项目文件的根目录。
/home/patron/apps/_logs/ 包含执行日志,例如 .preview.log。
/home/patron/apps/_state/ 存储运行时元数据,如 .pid 和 .port 文件。
/home/patron/apps//app/ 生成的 React Native 屏幕的目标位置。

cancorteaw-app

Local Expo / React Native app builder runner for my OpenClaw server.

This skill is a controlled runner that only executes an allowlisted script: /home/patron/apps/_bin/appctl
and that script is restricted to operate under: /home/patron/apps/.

What it does

This skill wraps appctl to provide a safe, repeatable workflow:

  • Create a new Expo app scaffold under /home/patron/apps/
  • Add a screen file under /home/patron/apps//app/.tsx
  • Start a web preview (expo start --web) bound to 127.0.0.1 on a chosen port
  • Check status of the preview process

Commands

1) Create a new app

Command:

  • new

Example:

  • new demoapp

Result:

  • Creates /home/patron/apps/demoapp
  • Initializes git (best-effort)
  • Uses npx create-expo-app in non-interactive mode

2) Add a screen

Command:

  • add-screen </CODE></LI></UL> <P><STRONG>Example:</STRONG></P> <UL> <LI><CODE>add-screen demoapp Settings "Settings"</CODE></LI></UL> <P><STRONG>Result:</STRONG></P> <UL> <LI>Writes: <CODE>/home/patron/apps/demoapp/app/Settings.tsx</CODE></LI> <LI>Makes a git commit (best-effort)</LI></UL> <HR> <H3 id=3-start-web-preview>3) Start web preview</H3> <P><STRONG>Command:</STRONG></P> <UL> <LI><CODE>preview <name></CODE></LI></UL> <P><STRONG>Environment:</STRONG></P> <UL> <LI><CODE>EXPO_PORT</CODE> (optional): override preview port<BR>Default: <CODE>19006</CODE></LI></UL> <P><STRONG>Example:</STRONG></P> <UL> <LI><CODE>preview demoapp</CODE></LI> <LI><CODE>EXPO_PORT=19010 preview demoapp</CODE></LI></UL> <P><STRONG>Result:</STRONG></P> <UL> <LI>Starts <CODE>npx expo start --web --port <port></CODE></LI> <LI>Writes logs to: <CODE>/home/patron/apps/_logs/<name>.preview.log</CODE></LI> <LI>Writes pid to: <CODE>/home/patron/apps/_state/<name>.pid</CODE></LI> <LI>Writes port to: <CODE>/home/patron/apps/_state/<name>.port</CODE></LI></UL> <HR> <H3 id=4-status>4) Status</H3> <P><STRONG>Command:</STRONG></P> <UL> <LI><CODE>status <name></CODE></LI></UL> <P><STRONG>Example:</STRONG></P> <UL> <LI><CODE>status demoapp</CODE></LI></UL> <P><STRONG>Result:</STRONG></P> <UL> <LI>Prints RUNNING with URL if process is alive</LI> <LI>Otherwise prints STOPPED</LI></UL> <H2 id=safety--guardrails>Safety / Guardrails</H2> <UL> <LI>The runner is <STRONG>allowlisted</STRONG>: only <CODE>node</CODE>, <CODE>npm</CODE>, <CODE>npx</CODE>, <CODE>git</CODE>, <CODE>bash</CODE>, <CODE>python3</CODE> can be invoked.</LI> <LI>All project paths are constrained to <CODE>/home/patron/apps</CODE>.</LI> <LI>Preview binds to <CODE>127.0.0.1</CODE> (loopback). Expose it externally only via explicit SSH tunnel if desired.</LI> <LI>Telemetry is disabled for Expo in preview (<CODE>EXPO_NO_TELEMETRY=1</CODE>).</LI></UL> <H2 id=troubleshooting>Troubleshooting</H2> <UL> <LI>If <CODE>preview</CODE> says running but page doesn’t load: check the log file in <CODE>/home/patron/apps/_logs/</CODE>.</LI> <LI>If a port is busy: set <CODE>EXPO_PORT</CODE> to a free port and re-run <CODE>preview</CODE>.</LI> <LI>To stop preview: <CODE>kill $(cat /home/patron/apps/_state/<name>.pid)</CODE> (if pid exists).</LI></UL> </div> <div class="lastanext flexRow"> <a class="lastart flexRow" href="/wz/339266.html" ><span>上一篇:</span><span>配置修改:Openclaw Skills 的安全配置管理</span></a> <a class="nextart flexRow" href="/wz/339268.html" ><span>下一篇:</span><span>RMN Visualizer: AI 智能体记忆映射与神经可视化 - Openclaw Skills</span></a> </div> </div> <div class="dtl-xgtj"> <div class="jb-titles flexRow"> <div class="jbtle-left flexRow"><b></b><p>相关推荐</p></div> </div> <div class="tjlist flexRow"> <div class="tj-item "> <div class="tjitemd"> <div class="tjimd-top flexRow"> <a class="imdta flexRow" href="/wz/365747.html" > <img src="https://images.jiaoben.net/uploads/20260417/logo_69e2083c4a2421.jpeg" > </a> <div class="imdt-right flexColumn"> <a class="imdtra flexRow overflowclass" href="/wz/365747.html" >claude code 安装</a> <a class="imdtrap flexRow overflowclass" href="/wz/365747.html" > 本次记录为windows环境 1.前置工作 安装了node 20+版本, git, powershell 2.安装 有梯子 打开 PowerShell 终端运行以下安装命令即可: 或者Windows </a> </div> </div> <div class="tjimd-down flexRow"> <div class="imdd-tab flexRow"> <p class="imddt-time flexRow"><b></b><span>2026-04-17</span></p> </div> <a href="/wz/365747.html" class="imdd-more flexRow flexcenter" >立即查看</a> </div> </div> </div> <div class="tj-item "> <div class="tjitemd"> <div class="tjimd-top flexRow"> <a class="imdta flexRow" href="/wz/365732.html" > <img src="https://images.jiaoben.net/uploads/20260417/logo_69e20757ecb5f1.jpeg" > </a> <div class="imdt-right flexColumn"> <a class="imdtra flexRow overflowclass" href="/wz/365732.html" >2026 最新 Claude Code 国内账号准备指南:邮箱、套餐、支付方式先搞清这几件事</a> <a class="imdtrap flexRow overflowclass" href="/wz/365732.html" > 2026 最新 Claude Code 国内账号准备指南:邮箱、套餐、支付方式先搞清这几件事 写在前面 很多人以为 Claude Code 的门槛主要在安装,其实不是。真正让新手反复卡住的,往往是账号 </a> </div> </div> <div class="tjimd-down flexRow"> <div class="imdd-tab flexRow"> <p class="imddt-time flexRow"><b></b><span>2026-04-17</span></p> </div> <a href="/wz/365732.html" class="imdd-more flexRow flexcenter" >立即查看</a> </div> </div> </div> <div class="tj-item "> <div class="tjitemd"> <div class="tjimd-top flexRow"> <a class="imdta flexRow" href="/wz/365693.html" > <img src="https://images.jiaoben.net/uploads/20260417/logo_69e1f9b7960dc1.jpeg" > </a> <div class="imdt-right flexColumn"> <a class="imdtra flexRow overflowclass" href="/wz/365693.html" >2026 最新 Claude Code 国内上手教程:从安装到第一次跑通,完整流程一次讲清</a> <a class="imdtrap flexRow overflowclass" href="/wz/365693.html" > 2026 最新 Claude Code 国内上手教程:从安装到第一次跑通,完整流程一次讲清 写在前面 很多人第一次接触 Claude Code,最容易误会它只是“把 Claude 放进终端里”。真上手 </a> </div> </div> <div class="tjimd-down flexRow"> <div class="imdd-tab flexRow"> <p class="imddt-time flexRow"><b></b><span>2026-04-17</span></p> </div> <a href="/wz/365693.html" class="imdd-more flexRow flexcenter" >立即查看</a> </div> </div> </div> <div class="tj-item "> <div class="tjitemd"> <div class="tjimd-top flexRow"> <a class="imdta flexRow" href="/wz/365630.html" > <img src="https://images.jiaoben.net/uploads/20260417/logo_69e1ebb455d601.jpeg" > </a> <div class="imdt-right flexColumn"> <a class="imdtra flexRow overflowclass" href="/wz/365630.html" >面试官问我:“AI 写代码比你快 100 倍,你的价值在哪?”</a> <a class="imdtrap flexRow overflowclass" href="/wz/365630.html" > 面试官是一个看着很资深的技术总监。他喝了口水,突然抛出了一个非常尖锐的问题: “你平时用 AI 写代码吗?现在 AI 敲代码的速度比你快 100 倍,错误率还比你低。在这种背景下,你觉得程序员的核心价 </a> </div> </div> <div class="tjimd-down flexRow"> <div class="imdd-tab flexRow"> <p class="imddt-time flexRow"><b></b><span>2026-04-17</span></p> </div> <a href="/wz/365630.html" class="imdd-more flexRow flexcenter" >立即查看</a> </div> </div> </div> </div> </div> </div> <div class="cd-right dtlcd-right"> <div class="dtl-ht"> <div class="jb-titles flexRow"> <div class="jbtle-left flexRow"><b></b><p>专题</p></div> </div> <div class="dtlht-list "> <div class="htl-item flexRow"> <div class="htmitem-left"> <div class="htiteml-top flexRow"> <a href="/wz/zt-69351.html" >#数据可视化</a> <span></span> </div> <a class="htiteml-down flexRow" href="/wz/zt-69351.html" >数据可视化(Data Visu</a> </div> <p class="htmitem-right flexRow flexcenter gz" data-id="69351" >+ 收藏</p> </div> <div class="htl-item flexRow"> <div class="htmitem-left"> <div class="htiteml-top flexRow"> <a href="/wz/zt-69342.html" >#自然语言处理</a> <span></span> </div> <a class="htiteml-down flexRow" href="/wz/zt-69342.html" >自然语言处理(Natural</a> </div> <p class="htmitem-right flexRow flexcenter gz" data-id="69342" >+ 收藏</p> </div> <div class="htl-item flexRow"> <div class="htmitem-left"> <div class="htiteml-top flexRow"> <a href="/wz/zt-68363.html" >#Excel公式</a> <span></span> </div> <a class="htiteml-down flexRow" href="/wz/zt-68363.html" >Excel公式就是:用函数 +</a> </div> <p class="htmitem-right flexRow flexcenter gz" data-id="68363" >+ 收藏</p> </div> <div class="htl-item flexRow"> <div class="htmitem-left"> <div class="htiteml-top flexRow"> <a href="/wz/zt-68355.html" >#Excel技巧</a> <span></span> </div> <a class="htiteml-down flexRow" href="/wz/zt-68355.html" >Excel是日常生活中必不可</a> </div> <p class="htmitem-right flexRow flexcenter gz" data-id="68355" >+ 收藏</p> </div> <div class="htl-item flexRow"> <div class="htmitem-left"> <div class="htiteml-top flexRow"> <a href="/wz/zt-68081.html" >#蛋仔派对</a> <span></span> </div> <a class="htiteml-down flexRow" href="/wz/zt-68081.html" >蛋仔派对最新官方活动、关卡速</a> </div> <p class="htmitem-right flexRow flexcenter gz" data-id="68081" >+ 收藏</p> </div> <div class="htl-item flexRow"> <div class="htmitem-left"> <div class="htiteml-top flexRow"> <a href="/wz/zt-68000.html" >#人工智能</a> <span></span> </div> <a class="htiteml-down flexRow" href="/wz/zt-68000.html" >人工智能(AI),简单说,就</a> </div> <p class="htmitem-right flexRow flexcenter gz" data-id="68000" >+ 收藏</p> </div> </div> </div> <div class=" dtl-zt"> <div class="jb-titles flexRow"> <div class="jbtle-left flexRow"><b></b><p>最新数据</p></div> </div> <div class="wkch-downs"> <div class="weekch-top flexRow"> <a class="wktpa flexRow" href="/wz/339273.html" > <img src="/jiaoben/image/noimg.png" > </a> <div class="wktpa-right flexColumn"> <a class="wktpara flexRow overflowclass" href="/wz/339273.html" >AI 网红生成:打造一致的虚拟形象 - Openclaw Skills</a> <a class="wktparp flexRow overflowclass" href="/wz/339273.html" > 什么是 AI 网红生成? AI </a> </div> </div> <div class="weekch-list"> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/339272.html" class="weekcha flexRow flexcenter overflowclass" >自动化部署与托管编排 - Openclaw Skills</a> </div> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/339271.html" class="weekcha flexRow flexcenter overflowclass" >SchemaPin:加密工具架构验证 - Openclaw Skills</a> </div> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/339270.html" class="weekcha flexRow flexcenter overflowclass" >Agent Lightning: 微软 AI 智能体训练框架 - Openclaw Skills</a> </div> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/339269.html" class="weekcha flexRow flexcenter overflowclass" >Daily Memory Save:为 Openclaw 技能提供持久化 AI 上下文</a> </div> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/339265.html" class="weekcha flexRow flexcenter overflowclass" >PetRPG: 拓麻歌子风格 AI 智能体游戏 - Openclaw Skills</a> </div> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/339264.html" class="weekcha flexRow flexcenter overflowclass" >Pywayne LLM 聊天窗口:自定义 PyQt5 AI 图形界面 - Openclaw Skills</a> </div> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/339263.html" class="weekcha flexRow flexcenter overflowclass" >权限蔓延扫描器:审计 Openclaw 技能安全</a> </div> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/339262.html" class="weekcha flexRow flexcenter overflowclass" >erc8128: 以太坊 HTTP 身份验证与签名 - Openclaw Skills</a> </div> <div class="weekch-con flexRow"> <div class="weekch-icon flexRow"><b></b></div> <a href="/wz/339261.html" class="weekcha flexRow flexcenter overflowclass" >风能与选址:风玫瑰图与风力数据分析 - Openclaw Skills</a> </div> </div> </div> </div> <div class=" dtl-wz"> <div class="jb-titles flexRow"> <div class="jbtle-left flexRow"><b></b><p>相关文章</p></div> </div> <div class="blog-list"> <a href="/wz/359557.html" class="bloga flexRow over"><p class="overflowclass">Banana Cog: AI 多图生成与编排 - Openclaw Skills</p><div class="blogtime"><span>04/</span>17</div></a> <a href="/wz/359560.html" class="bloga flexRow over"><p class="overflowclass">Moltbook Negotiator:AI 对 AI 市场谈判 - Openclaw Skills</p><div class="blogtime"><span>04/</span>17</div></a> <a href="/wz/359561.html" class="bloga flexRow over"><p class="overflowclass">Markdown 幻灯片:生成独立 HTML 演示文稿 - Openclaw Skills</p><div class="blogtime"><span>04/</span>17</div></a> <a href="/wz/359562.html" class="bloga flexRow over"><p class="overflowclass">创意实验室:自主创新与原型开发 - Openclaw Skills</p><div class="blogtime"><span>04/</span>17</div></a> <a href="/wz/359563.html" class="bloga flexRow over"><p class="overflowclass">Gumroad 卖家:自动化数字产品销售 - Openclaw Skills</p><div class="blogtime"><span>04/</span>17</div></a> <a href="/wz/359564.html" class="bloga flexRow over"><p class="overflowclass">闪卡制作器:自动生成 Anki 和 Quizlet 牌组 - Openclaw Skills</p><div class="blogtime"><span>04/</span>17</div></a> <a href="/wz/359565.html" class="bloga flexRow over"><p class="overflowclass">紧急响应技能:管理争议与升级 - Openclaw Skills</p><div class="blogtime"><span>04/</span>17</div></a> <a href="/wz/359566.html" class="bloga flexRow over"><p class="overflowclass">DNS 查询:网络分析与传播 - Openclaw Skills</p><div class="blogtime"><span>04/</span>17</div></a> <a href="/wz/359567.html" class="bloga flexRow over"><p class="overflowclass">DeFi 收益优化器:安全的稳定币策略 - Openclaw Skills</p><div class="blogtime"><span>04/</span>17</div></a> <a href="/wz/359568.html" class="bloga flexRow over"><p class="overflowclass">客户 CRM:管理客户关系与销售 - Openclaw Skills</p><div class="blogtime"><span>04/</span>17</div></a> </div> </div> <div class="cdr-ai"> <div class="jb-titles flexRow"> <div class="jbtle-left flexRow"><b></b><p>AI精选 </p></div> <a class="jbtitle-more flexRow" href="/category/list_344_1.html" title=""><span>更多</span><b></b></a> </div> <div class="ai-list"> <div class="ail-top flexRow"> <a href="/wz/365746.html" title="" class="ailta "> <img src="https://images.jiaoben.net/uploads/20260417/logo_69e208357343d1.jpeg" > <p ><span>MCP协议设计与实现-第13章 </span></p></a> <a href="/wz/365745.html" title="" class="ailta "> <img src="https://images.jiaoben.net/uploads/20260417/logo_69e2082ad8b5b1.jpeg" > <p ><span>从零开发一个 MCP 服务器 +</span></p></a> </div> <div class="ail-down"> <a class="ali-con flexRow" href="/wz/365737.html" title=""> <div class="alicon-left flexRow"><span>精选</span></div> <p class="aliconp overflowclass">MCP协议设计与实现-第11章 Python Client 实现剖析</p> </a> <a class="ali-con flexRow" href="/wz/365731.html" title=""> <div class="alicon-left flexRow"><span>精选</span></div> <p class="aliconp overflowclass">MCP协议设计与实现-第14章 SSE 与 WebSocket</p> </a> <a class="ali-con flexRow" href="/wz/365699.html" title=""> <div class="alicon-left flexRow"><span>精选</span></div> <p class="aliconp overflowclass">MCP协议设计与实现-第20章 从零构建一个生产级 MCP Server</p> </a> <a class="ali-con flexRow" href="/wz/365698.html" title=""> <div class="alicon-left flexRow"><span>精选</span></div> <p class="aliconp overflowclass">MCP协议设计与实现-第16章 服务发现与客户端注册</p> </a> <a class="ali-con flexRow" href="/wz/365691.html" title=""> <div class="alicon-left flexRow"><span>精选</span></div> <p class="aliconp overflowclass">MCP协议设计与实现-第18章 Elicitation、Roots 与配置管理</p> </a> <a class="ali-con flexRow" href="/wz/365689.html" title=""> <div class="alicon-left flexRow"><span>精选</span></div> <p class="aliconp overflowclass">MCP协议设计与实现-第10章 Python Server 实现剖析</p> </a> <a class="ali-con flexRow" href="/wz/365683.html" title=""> <div class="alicon-left flexRow"><span>精选</span></div> <p class="aliconp overflowclass">MCP协议设计与实现-第17章 sampling</p> </a> <a class="ali-con flexRow" href="/wz/365682.html" title=""> <div class="alicon-left flexRow"><span>精选</span></div> <p class="aliconp overflowclass">MCP协议设计与实现-第09章 TypeScript Client 实现剖析</p> </a> </div> </div> </div> <div class="cdr-blog"> <div class="jb-titles flexRow"> <div class="jbtle-left flexRow"><b></b><p>脚本推荐</p></div> </div> <div class="blog-list"> <a href="/wz/zt-49225.html" title="" class="bloga flexRow over"><p class="overflowclass">SeeDance 2.0 Video Creator专区</p></a> <a href="/wz/zt-49224.html" title="" class="bloga flexRow over"><p class="overflowclass">OpenClaw AI专区</p></a> <a href="/wz/zt-49223.html" title="" class="bloga flexRow over"><p class="overflowclass">cowork专区</p></a> <a href="/wz/zt-49222.html" title="" class="bloga flexRow over"><p class="overflowclass">claude code skills专区</p></a> </div> </div> </div> </div> </div> </div> </main> <script> $(function() { // “+ 收藏”按钮点击事件 $(document).on('click', '.htmitem-right, .ztop-right', function(e) { // 仅针对包含 “+ 收藏” 文字的按钮 if ($(this).text().indexOf('+ 收藏') === -1) return; e.preventDefault(); const id = $(this).data('id'); if (!id) { layer.msg('该项暂无有效ID,无法收藏'); return; } // 构造收藏 URL: 当前域名 + /wz/zt- + id + / const bookmarkUrl = window.location.origin + '/wz/zt-' + id + '.html'; // 获取收藏标题 (优先从同级元素获取话题名称,否则使用页面标题) let bookmarkTitle = $(this).closest('.htl-item, .zttopd').find('a:first, span.overflowclass').text().trim() || document.title; if (bookmarkTitle.startsWith('#')) bookmarkTitle = bookmarkTitle.substring(1); // 浏览器收藏逻辑 (带 Fallback) try { if (window.sidebar && window.sidebar.addPanel) { // Firefox < 23 window.sidebar.addPanel(bookmarkTitle, bookmarkUrl, ""); } else if (window.external && ('AddFavorite' in window.external)) { // IE window.external.AddFavorite(bookmarkUrl, bookmarkTitle); } else { // Chrome, Safari, Firefox 23+, etc. const isMac = /Mac/i.test(navigator.userAgent); const keyStr = isMac ? 'Command + D' : 'Ctrl + D'; layer.confirm('由于浏览器安全限制,请使用 <b>' + keyStr + '</b> 手动添加收藏。<br><br>收藏地址:<br><small>' + bookmarkUrl + '</small>', { title: '收藏提示', btn: ['复制链接', '知道了'], yes: function(index) { copyToClipboard(bookmarkUrl).then(() => { layer.msg('链接已复制,请手动添加到收藏夹'); }).catch(() => { layer.msg('复制失败,请手动选择复制'); }); layer.close(index); } }); } } catch (err) { layer.msg('收藏失败,请手动添加'); } }); // 兼容非 HTTPS 的复制函数 function copyToClipboard(text) { if (navigator.clipboard && window.isSecureContext) { return navigator.clipboard.writeText(text); } else { let textArea = document.createElement("textarea"); textArea.value = text; textArea.style.position = "fixed"; textArea.style.left = "-999999px"; textArea.style.top = "-999999px"; document.body.appendChild(textArea); textArea.focus(); textArea.select(); return new Promise((res, rej) => { document.execCommand('copy') ? res() : rej(); textArea.remove(); }); } } }); </script> <footer> <div class="foot "> <div class="foot-top flexRow"> <div class="foot-left"> <div class="ftl-top flexRow"><span class="flexRow flexcenter">脚本</span>在线</div> <p class="ftl-down"> 智能赋能梦想,脚本构筑现实。我们致力于链接AI智能指令 与传统自动化,为您提供一站式、高效率的脚 本资产与生成 服务。 </p> </div> <div class="foot-right flexRow"> <div class="ftr-list flexColumn"> <p>核心板块</p> <span>AI脚本库</span> <span>自动化仓库</span> <span>脚本实验室</span> </div> <div class="ftr-list flexColumn"> <p>关于我们</p> <a href="/category/list_229_1.html" >最新游戏</a> <span>商务合作</span> <span>隐私政策</span> </div> <div class="ftr-list flexColumn"> <p>社区支持</p> <span >API文档</span> <a href="/category/list_334_1.html" >攻略资讯</a> <span>违规举报</span> </div> </div> </div> <div class="foot-down flexColumn"> <p>© 2026 jiaoben.net | 脚本在线 | 联系:jiaobennet2026@163.com</p> <p>备案:<a style="color: #7F7F7F;" href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">湘ICP备18025217号-11</a> </p> </div> </div> </footer> <div style="display:none;"> <script type="text/javascript"> var _paq = window._paq = window._paq || []; _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="//tongji.zhangwan.net/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '29']); // Add this code below within the Matomo JavaScript tracker code // Important: the tracker url includes the /matomo.php var secondaryTrackerUrl = u+'matomo.php'; var secondaryWebsiteId = 27; // Also send all of the tracking data to this other Matomo server, in website ID 77 _paq.push(['addTracker', secondaryTrackerUrl, secondaryWebsiteId]); // That's it! var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript'; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?5d3cfe1f36b1988029fe82a0d475b20d"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </div> </body> </html>