我正在使用Swift编写的Mac应用程序,该应用程序使用以下代码在WKWebView
中加载网站:
let webConfiguration = WKWebViewConfiguration()
webConfiguration.websiteDataStore = WKWebsiteDataStore.nonPersistent() //set it to "private browsing"
self.webview = WKWebView(frame: .zero, configuration: webConfiguration)
self.webview?.uiDelegate = self
self.webview?.navigationDelegate = self
self.view.addSubview(self.webview!)
let myURL = URL(string: "http://127.0.0.1:8000/")
let mRequest = URLRequest(url: myURL!, cachePolicy: NSURLRequest.CachePolicy.reloadIgnoringLocalAndRemoteCacheData)
self.webview?.load(mRequest)
然后,本机代码使用以下命令在网站上调用javascript函数:
self.webview?.evaluateJavaScript("randomjsfunction('" + secret + "')", completionHandler: nil)
Javascript函数存在并且可以正常运行(它只是从页面中删除了一个元素,仅此而已)。
然后使用以下命令将WKWebView与父NSViewController
一起删除:
let myURL = URL(string: "about:blank")
let mRequest = URLRequest(url: myURL!)
self.webview?.load(mRequest)
self.webview?.invalidateRestorableState()
self.webview?.stopLoading()
self.webview?.removeFromSuperview()
self.webview?.uiDelegate = nil
self.webview?.navigationDelegate = nil
self.webview = nil
self.removeFromParent()
self.dismiss(self.parent)
几分钟后,我创建了该进程的内存转储,并且Javascipt函数调用以及传递的参数仍然存在于内存中:
我将需要确保不再使用Javascript调用的参数,并将其从内存中清除。但是,甚至不破坏整个Web视图似乎也可以释放内存。
我试图使用addUserScript()
函数将JS调用添加到用户脚本中,然后使用evaluateJavaScript()
调用该函数,但是即使addUserScript()
调用也存在于内存中。 / p>
基于转储中显示的WebPage RunJavaScriptInMainFrame
,我在WebKit's code中找到了基础函数。但是我不知道该如何发展。