Mac上的WKWebView-从内存中清除敏感的JavaScript调用

时间:2018-11-13 13:53:26

标签: javascript swift memory-management wkwebview

我正在使用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函数调用以及传递的参数仍然存在于内存中:

Memory dump

我将需要确保不再使用Javascript调用的参数,并将其从内存中清除。但是,甚至不破坏整个Web视图似乎也可以释放内存。

我试图使用addUserScript()函数将JS调用添加到用户脚本中,然后使用evaluateJavaScript()调用该函数,但是即使addUserScript()调用也存在于内存中。 / p>

基于转储中显示的WebPage RunJavaScriptInMainFrame,我在WebKit's code中找到了基础函数。但是我不知道该如何发展。

0 个答案:

没有答案