飞牛移动 App 容器(WebView iframe)对应用的 Web 存储 / JS 支持受限
现象 / Symptom
在飞牛移动 App(iOS/Android 客户端)内打开 9Router(type:"url" 或 type:"iframe" 均复现),存在以下问题:
- 登录无法保存:应用有自带登录(dashboard 密码),在飞牛 App 容器内输入正确密码后反复跳回登录页,无法进入。同一应用在电脑浏览器 / 手机浏览器直接访问
http://<NAS>:20128 则登录正常。
- 主题设置不持久化:应用基于
localStorage 的主题选择(深色/浅色)在容器内不保存,每次打开恢复默认。
- JS 驱动的 UI 状态不生效:例如应用打包里的货币换算补丁(成本显示按语言切换 ¥/$,纯前端 JS 逻辑),在容器内不显示效果,但浏览器访问正常。
根因 / Root Cause
飞牛移动 App 通过 WebView iframe 打开所有应用(无论应用配置是 type:"url" 还是 type:"iframe",移动端客户端一律用 iframe 容器承载)。
- 登录用 cookie(
SameSite=lax),在 跨源 iframe 中浏览器/WebView 拒绝持久化该 cookie → session 无法建立 → 反复跳回登录页。
localStorage / JS 驱动的 UI 状态在 WebView 容器内持久化受限。
验证 / Verification
# 1. 应用登录 API 返回的 cookie 属性(SameSite=lax)
curl -s -X POST http://127.0.0.1:20128/api/auth/login \
-H "Content-Type: application/json" -d '{"password":"..."}' -D - | grep -i set-cookie
# → set-cookie: auth_token=...; Path=/; HttpOnly; SameSite=lax
# 2. 浏览器直接访问(非 iframe) 登录正常;飞牛 App 容器(iframe) 登录失败
影响 / Impact
- 任何自带登录 + cookie session 的 fnOS 应用,在飞牛移动 App 容器内都无法登录。
- 依赖
localStorage / 前端 JS 持久化的功能(主题、语言、货币等)在移动容器内体验不完整。
建议 / Suggestion(转飞牛侧)
- 移动端容器改用非 iframe 方式打开应用(如新页面 / 系统浏览器),或在容器内允许第三方/跨源 cookie 与 localStorage。
- 或提供容器内 cookie/localStorage 持久化 的开关。
- 或允许应用在容器内以
SameSite=None; Secure 设置 cookie(需配合 HTTPS 访问)。
环境 / Environment
- fnOS 版本:1.1.31xx
- 客户端:飞牛移动 App(iOS / Android)
- 受影响应用:9Router(
type:"url" 与 type:"iframe" 均复现)
飞牛移动 App 容器(WebView iframe)对应用的 Web 存储 / JS 支持受限
现象 / Symptom
在飞牛移动 App(iOS/Android 客户端)内打开 9Router(
type:"url"或type:"iframe"均复现),存在以下问题:http://<NAS>:20128则登录正常。localStorage的主题选择(深色/浅色)在容器内不保存,每次打开恢复默认。根因 / Root Cause
飞牛移动 App 通过 WebView iframe 打开所有应用(无论应用配置是
type:"url"还是type:"iframe",移动端客户端一律用 iframe 容器承载)。SameSite=lax),在 跨源 iframe 中浏览器/WebView 拒绝持久化该 cookie → session 无法建立 → 反复跳回登录页。localStorage/ JS 驱动的 UI 状态在 WebView 容器内持久化受限。验证 / Verification
影响 / Impact
localStorage/ 前端 JS 持久化的功能(主题、语言、货币等)在移动容器内体验不完整。建议 / Suggestion(转飞牛侧)
SameSite=None; Secure设置 cookie(需配合 HTTPS 访问)。环境 / Environment
type:"url"与type:"iframe"均复现)