我在WKWebView中有一些第三方内容,试图在关闭窗口时从localStorage读取。 WKWebView不会在window.close上触发任何事件,所以我自己在webViewDidClose
委托方法中进行此操作。
问题在于,一旦执行window.close()
,localStorage就会为空!在桌面浏览器窗口中不会发生这种情况。有趣的是,只有localStorage丢失了,sessionStorage仍然可以访问。
在Safari检查器控制台中:
onunload=function() {
debugger;
// localStorage is null
// sessionStorage is Storage
}
close();
在本机方面:
func webViewDidClose(_ webView: WKWebView) {
// Trigger the unload event before closing the web view
webView.evaluateJavaScript("dispatchEvent(new Event('unload'));")
// Give the content some time to respond to the event, and then destroy the web view
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(500)) {
self.webView?.removeFromSuperview();
self.webView = nil
}
}