在 WKWebViews 之间共享/重新加载 localStorage、IndexedDB、cookie

Kal*_*zem 2 local-storage ios indexeddb swift wkwebview

有一个带有 WKWebView“Parent”的控制器,它打开(推送)另一个带有另一个 WKWebView“Child”的控制器。

Child修改 localStorage 时,sessionStorage 或 IndexedDB 然后弹回ParentParent不知道更改并需要重新加载以查看由 设置的新值Child

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

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

Kal*_*zem 6

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)
Run Code Online (Sandbox Code Playgroud)