常见问题 FAQ
页面里 xunlei 是 undefined?
两种可能:
- 在普通浏览器里预览:浏览器环境没有平台注入,用
typeof xunlei !== 'undefined'判空并降级(见本地调试); - 使用了
in_app_webview入口:该入口不注入xunlei。
为什么 <a download> / blob: 下载没反应?
微应用内浏览器原生下载被全部禁用,保存文件必须通过 xunlei.tasks.create 创建下载任务;页面生成的数据先用 xunlei.runtime.blob.createObjectURL 转成 URL。详见下载规则。
能加载 CDN 上的 JS / 字体 / 图片吗?
不能。页面资源(脚本、样式、字体、媒体)只允许来自微应用包内,远程资源会被拦截(RESOURCE_BLOCKED)。所有依赖通过 npm + 构建工具打进包里。
fetch 可以请求任意接口吗?
不可以。网络请求采用白名单制:需在 manifest 中声明 network 权限并配置 network.urls,只有命中白名单的地址才会放行(白名单内支持跨域、可自由设置请求头)。注意"资源加载"(页面引用的文件)和"数据请求"(fetch)是两回事:前者始终只能来自包内,后者由白名单约束。见网络白名单。
声明了 tasks.create 权限,为什么还是 PERMISSION_DENIED?
页面和事件脚本都能调用 xunlei.tasks,但每个方法都检查对应的任务权限。确认当前安装的 manifest 包含 tasks.create,并在修改权限后重载微应用;createGroup 也使用 tasks.create 权限。事件上下文中的 ctx.task 控制方法不受该权限控制。见权限模型。
怎么打开外部网页?
页面内直接跳转外部地址会被拦截。按场景选择:
- 整个微应用就是一个现成 Web 页面 → 用
in_app_webview入口; - 需要登录 / 探测外部页面 → 用辅助 WebView。
设置项怎么保存?能在代码里改设置吗?
不能。设置界面由迅雷根据 manifest.settings 自动渲染,只有用户能在设置界面中修改;微应用代码通过 xunlei.settings.<name> 只读当前值。见数据与日志。
事件脚本里能用 DOM / document 吗?
不能。事件脚本运行在无界面的 JS 沙箱中,没有 DOM,也不支持页面导航。需要真实渲染页面时用辅助 WebView。可用能力清单见钩子事件 · 运行环境。
事件脚本没触发?
依次检查:
scripts[].match是否声明?urls和labels都没写时脚本不参与匹配;- 匹配规则写法是否正确?如
https://example.com缺少 path 部分是非法的,应写https://example.com/(详见URL 匹配规则); - 脚本是否在加载后立即注册了回调?注册超时会以
EVENT_TIMEOUT失败; - 微应用是否处于启用状态(被停用的微应用不参与匹配)?
debug 日志为什么看不到?
xunlei.logger.debug 只在开发者模式安装的微应用中输出。商店安装的正式版本请使用 info 及以上级别。见数据与日志。
多个微应用匹配同一个 URL 会怎样?
全部执行,最近安装的微应用优先。因此匹配规则应尽量精确(限定到自己的目标站点),避免大范围 *://*/* 误伤其它微应用的解析。


