Share/Reload localStorage、IndexedDB、WKWebViews 之间的 cookie

Share/Reload localStorage, IndexedDB, cookies between WKWebViews

有一个带有 WKWebView "Parent" 的控制器打开(推送)另一个带有另一个 WKWebView "Child" 的控制器。

Child 修改 localStorage、sessionStorage 或 IndexedDB 然后弹回到 Parent 时,Parent 不知道更改,需要重新加载才能看到新值集通过 Child.

这意味着两个WKWebView共享相同的localStorage、sessionStorage、indexedDB,但是它们需要刷新内容才能看到修改。

如何在WKWebView之间实时共享同一个存储?

WKWebViews 的init 可以接收一个参数WKWebViewConfiguration 和一个名为processPool 的变量,它代表所有的web 内容(包括localStorage、IndexedDB、cookies 等等)进程。

因此,为了让 WKWebViews 实时共享所有内存管理,您需要为它们声明一个唯一的 WKProcessPool。

let uniqueProcessPool = WKProcessPool()

let configA = WKWebViewConfiguration()
configA.processPool = uniqueProcessPool
let webViewA = init(frame: CGRect.zero, configuration: configA)

let configB = WKWebViewConfiguration()
configB.processPool = uniqueProcessPool
let webViewB = init(frame: CGRect.zero, configuration: configB)