在线咨询
Skip to content

常见问题 FAQ ​

页面里 xunlei 是 undefined? ​

两种可能:

  1. 在普通浏览器里预览:浏览器环境没有平台注入,用 typeof xunlei !== 'undefined' 判空并降级(见本地调试);
  2. 使用了 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 控制方法不受该权限控制。见权限模型。

怎么打开外部网页? ​

页面内直接跳转外部地址会被拦截。按场景选择:

设置项怎么保存?能在代码里改设置吗? ​

不能。设置界面由迅雷根据 manifest.settings 自动渲染,只有用户能在设置界面中修改;微应用代码通过 xunlei.settings.<name> 只读当前值。见数据与日志。

事件脚本里能用 DOM / document 吗? ​

不能。事件脚本运行在无界面的 JS 沙箱中,没有 DOM,也不支持页面导航。需要真实渲染页面时用辅助 WebView。可用能力清单见钩子事件 · 运行环境。

事件脚本没触发? ​

依次检查:

  1. scripts[].match 是否声明?urls 和 labels 都没写时脚本不参与匹配;
  2. 匹配规则写法是否正确?如 https://example.com 缺少 path 部分是非法的,应写 https://example.com/(详见URL 匹配规则);
  3. 脚本是否在加载后立即注册了回调?注册超时会以 EVENT_TIMEOUT 失败;
  4. 微应用是否处于启用状态(被停用的微应用不参与匹配)?

debug 日志为什么看不到? ​

xunlei.logger.debug 只在开发者模式安装的微应用中输出。商店安装的正式版本请使用 info 及以上级别。见数据与日志。

多个微应用匹配同一个 URL 会怎样? ​

全部执行,最近安装的微应用优先。因此匹配规则应尽量精确(限定到自己的目标站点),避免大范围 *://*/* 误伤其它微应用的解析。

还有问题? ​