Life OS 文档

文档 / 运行环境

打开 Markdown

运行环境

Web 应用运行在独立 iframe 内。宿主提供主题、JavaScript Bridge 和应用包加载器,应用只负责自己的界面与逻辑。

沙箱边界

iframe 使用 sandbox="allow-scripts",不开放同源权限。应用不能获取宿主的登录 Cookie 或直接访问父页面 DOM。

所有数据与系统能力通过 platform.* 调用,宿主代为处理。不要直接使用 fetchXMLHttpRequestlocalStorage、Cookie 或自定义 window.parent 通信;不要从 CDN 引入脚本、CSS、字体,也不要加载未知代码。

应用不能直接联网,数据访问必须通过 platform.*。Web 采用可信外层容器与独立的 sandbox srcdoc:外层禁止 iframe 导航到 URL,两份 CSP 同时约束脚本执行和资源来源,阻断 fetch/XHR、外部资源、表单、跳转及嵌套页面脚本。包内 JS/CSS 和现有 DOM 界面保持支持。当前没有应用网络请求白名单 API;不要使用 iframe、外部 CDN、WebRTC 或直接跳转实现功能。

可用的编程环境

  • 原生 JavaScript、DOM、事件和 Promise。
  • 应用包中的 .js 模块、.css 文件和基础 app.json
  • platform.uiplatform.data能力一览中的宿主接口。

没有 Node.js、npm 包安装、React、Vue、TypeScript 或 JSX 编译步骤。若使用开发期编译工具,提交的结果仍然必须符合应用包格式。

表单默认提交会被拦截。请通过按钮事件或自己的 submit 处理逻辑执行操作,不要依赖页面刷新。

启动和生命周期

打开应用后加载文件包,执行入口函数;入口成功返回后,宿主认为应用准备完成。20 秒内没有准备完成会显示打开超时,因此不要在入口等待无限循环或长时间后台任务。

切换标签、切换对话不会销毁应用 iframe。关闭标签或刷新浏览器会销毁内存状态,再次打开时重新执行入口。未提交的输入仅保留在应用内存中;需要跨刷新恢复的草稿必须通过 platform.data 保存到准备好的数据集,不能使用浏览器 localStorage。

当前没有内置 onShowonHide、页面栈或后台任务回调。多页面切换由应用自己组织,参考多文件待办

跨端设计

platform.host 返回实际宿主:Web 为 "web",Apple 与 Android 容器分别为 "ios""macos""android"。公共运行时 v1 已冻结;仓库提供 iOS 产品源码及三端测试宿主,iOS 真机验收与公开分发尚未完成,macOS/Android 完整产品和 Windows 仍为后续目标。应用只通过 JSB 使用宿主能力,用 platform.can 检查当前实例的真实能力;测试宿主存在不代表对应产品已经发布。

使用 platform.can(name) 检查能力,并为缺失能力提供说明或替代操作。布局应适应窄屏、触控与不同安全区域,不能仅依赖鼠标 hover。