运行时架构
本页介绍微应用是如何被迅雷加载和运行的:安装到哪里、页面运行在什么样的环境中、平台能力如何注入。理解这些机制,可以解释开发中遇到的大部分"为什么"。
安装与加载
微应用以目录为最小运行单元:根目录必须包含一个 manifest.json,连同页面、脚本、资源文件一起构成完整的微应用包。
- 用户侧安装:从微应用商店安装时,迅雷把微应用包下载解压到本地内部目录并登记注册;
- 加载方式:微应用页面直接从本地目录加载,所有修改立即生效;
- 数据隔离:存储、设置等数据按微应用唯一标识(identity)隔离,微应用之间无法互访。
微应用唯一标识(identity)
每个微应用有一个 32 位字符串的稳定的唯一标识 identity(可通过 xunlei.info.identity 读取),存储、设置等数据都按它隔离。identity 的来源取决于安装方式:
| 安装方式 | identity 来源 | 稳定性 |
|---|---|---|
| 本地加载(开发者模式) | 由微应用目录的绝对路径派生 | 目录移动或改名后,标识随之变化 |
| 商店安装 | 上架时由官方分配 | 同一微应用的所有版本标识稳定 |
对开发的实际影响:
- 本地加载期间产生的存储数据,与商店安装后的数据互不相通(两者 identity 不同);
- 本地调试时移动了项目目录,等同于一个"新的"微应用,原有本地数据不会延续。
页面运行环境
微应用页面运行在迅雷创建的 WebView 页面容器中,这个环境由三部分构成:

① 标准 WebView
微应用页面是运行在页面容器里的 Web 页面,可使用兼容基线内的 HTML / CSS / JS,以及 fetch / XMLHttpRequest 等标准 Web API;Vue / React 等前端框架的构建产物也须满足浏览器兼容基线。
② 注入 CSP 限制
平台为页面注入 CSP(内容安全策略):页面只能加载微应用包内的脚本、样式、字体、媒体等资源,远程资源、iframe、外部跳转均会被拦截。这保证了页面运行的所有代码都来自经过审核的微应用包本身。
③ 注入原生 API(xunlei)
WebView 中自动注入全局对象 xunlei,页面通过它调用迅雷的原生能力:下载任务管理、键值对存储、设置读取、日志、辅助 WebView 等。完整清单见平台能力。
窗口由迅雷负责创建和管理,manifest.window 可配置初始尺寸。每个微应用拥有相互隔离的运行环境(页面会话、存储数据等),微应用之间无法互访。
安全模型
微应用运行在一个受管控的容器里,安全边界可以概括为五条规则:
| 规则 | 说明 |
|---|---|
| 资源本地化 | CSP 限制页面只能加载微应用包内的 JS / CSS / 字体 / 媒体等资源 |
| 网络白名单 | fetch / XMLHttpRequest / WebSocket 等直接网络请求,只能访问 manifest 中 network.urls声明的地址 |
| 导航受控 | 页面可以在包内跳转(含 SPA 路由),但不能跳转到外部网页、不能 window.open 打开新窗口 |
| 下载收口 | 浏览器原生下载(<a download>、Content-Disposition 等)全部被禁用;所有下载必须通过 xunlei.tasks.create 创建任务完成 |
| 权限声明 | 涉及宿主能力的 API(任务、文件访问、网络、blob、辅助 WebView)必须在 manifest 的 permissions 中声明,未声明的调用返回 PERMISSION_DENIED |
资源加载 ≠ 网络请求
CSP 约束的是页面资源的加载(脚本、样式等,仅限包内);通过 fetch / XMLHttpRequest 发起的数据请求不受 CSP 约束,但受 network.urls 白名单约束。两条限制相互独立。
完整的"哪些能用 / 哪些不能用"清单见 能力与限制。


