嵌入的第三方报名表单在 Safari 上打不开 点提交按钮一点反应没有 控制台报 SecurityError The operation is insecure 同一个页面在 Chrome 一切正常 用户清完缓存也没用。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,Safari 默认拦第三方 iframe 的存储访问 localStorage 和 cookie 都算 脚本一读写就抛异常 表单初始化当场中断 之后整个表单都不再响应 新手容易先往网络问题上想。
「第三方存储被阻止」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
try { localStorage.setItem('k','1'); }
catch (e) { ok = false; }
权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
具体做法是,在 iframe 里包一层 try catch 探测存储是否可用 不可用就走内存降级;会话状态改由服务端放进短链或隐藏字段 别依赖浏览器存储;确实要存就引导用户在新窗口打开 顶层页面不受这条限制。
最后用这个标准收尾,Safari 无痕和普通模式都能提交表单 控制台不再出现 SecurityError 提交后有成功提示。
