使用 WKWebView 时,localStorage 未保存在 iFrame 中

Posted

技术标签:

【中文标题】使用 WKWebView 时,localStorage 未保存在 iFrame 中【英文标题】:localStorage not saving inside iFrame when using WKWebView 【发布时间】:2021-06-24 18:35:54 【问题描述】:

在 WKWebView 中使用时,我对这个 iFrame 问题摸不着头脑,因为没有任何 localStorage 更改持续存在。虽然这些值似乎在应用程序仍在运行时被保存,但一旦应用程序终止,iFrame 页面中的所有 localStorage 值都会被清除。

这是我的标准网页视图代码

override func viewDidLoad() 
        super.viewDidLoad()
        guard let url = URL(string: "https://example.com") else 
            return
        
        webView.configuration.preferences.javascriptEnabled = true
        
        view.addSubview(webView)
        webView.load(URLRequest(url: url))

https://example.com 返回一个包含 iFrame 的页面,该 iFrame 引用 https://example.com 中的子页面。

我已经尝试在 iFrame 标签中添加 sandbox="allow-same-origin" 但无济于事。

可以使用一些想法来了解如何使其正常工作。提前致谢。

【问题讨论】:

当页面不在 iFrame 中时,localStorage 在应用程序关闭之间工作得非常好。我刚刚在 Chome 进行了测试,一切正常。 Safari 不走运。 【参考方案1】:

通过使父框架和子框架来自同一域来对问题进行排序。

例如:如果页面在 https://mysite.example.com 加载,则 iFrame 不能指向 https://exmaple.com/mypage.html,这正是我看到问题时的设置。

【讨论】:

以上是关于使用 WKWebView 时,localStorage 未保存在 iFrame 中的主要内容,如果未能解决你的问题,请参考以下文章

当 WKWebView 框架调整大小时,内容大小损坏

WKWebView - 设备旋转时内容不旋转

播放音频 WKWebView 时如何使用 MPNowPlayingInfoCenter 显示播放信息?

从 WKWebView 调用时,无法使用 JavaScript 在移动 Safari 中打开链接

上传图片时iOS应用WKWebView错误

导航到特定 URL 时关闭 WKWebView