remove initial scale jscript

This commit is contained in:
Xinlei(Ryan) Pan 2020-03-30 12:10:27 -04:00
parent 710adec037
commit 1681048279

View File

@ -19,6 +19,9 @@ import WebKit
var dynamicHeight: Bool = true
var callHandlerName: String?
var webviewModel: WebViewModel? {
return model as? WebViewModel
}
override open func setupView() {
super.setupView()
@ -34,14 +37,6 @@ import WebKit
if let messageHandlerName = messageHandler {
wkUserController.add(self, name: messageHandlerName)
}
//inital-scale is necessary to update display correct scale
let source: String = "var meta = document.createElement('meta');" +
"meta.name = 'viewport';" +
//depends on how much clint driven
"meta.content = 'initial-scale=1.0';" +
"var head = document.getElementsByTagName('head')[0];" + "head.appendChild(meta);";
let wkScript = WKUserScript(source: source, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
wkUserController.addUserScript(wkScript)
//server driven addition script
if let jsScript = jsScript {
@ -65,12 +60,11 @@ import WebKit
guard let model = model as? WebViewModel else { return }
self.delegateObject = delegateObject
if model.callHandler != nil || model.jsScript != nil {
if model.callHandler != nil || model.jsScript != nil {
/*
webView's configuration property is immutable.
In order to add call handler into webview, need to create a new webview.
callHanlder
*/
*/
webView?.removeFromSuperview()
let webView = createWebView(messageHandler: model.callHandler, jsScript:model.jsScript)
addSubview(webView)
@ -91,7 +85,6 @@ import WebKit
webView?.loadHTMLString(htmlString, baseURL: nil)
}
bringSubviewToFront(loadingSpinner)
//TO DO: local path?
}
func pinSpinnerView() {
@ -115,20 +108,29 @@ extension WebView : WKUIDelegate {
// hide loading
loadingSpinner.pause()
//update webview's heigth when webview is ready
if !dynamicHeight {
return
}
//update webview's heigth when webview is ready
webView.evaluateJavaScript("document.readyState", completionHandler: { [weak self] (result, error) in
if result == nil || error != nil {
return
}
webView.evaluateJavaScript("document.body.scrollHeight", completionHandler: { (result, error) in
guard let height = result as? CGFloat else { return }
self?.webViewHeight?.constant = height
self?.delegateObject?.moleculeDelegate?.moleculeLayoutUpdated(self!)
if let _ = webviewModel?.jsScript {
/* evaluateJavaScript only works when webview contains userscrpt.
otherwise, it would return WKErrorDomain Code=4 "A JavaScript exception occurred"
*/
webView.evaluateJavaScript("document.readyState", completionHandler: { [weak self] (result, error) in
if result == nil || error != nil {
return
}
webView.evaluateJavaScript("document.body.scrollHeight", completionHandler: { (result, error) in
guard let height = result as? CGFloat else { return }
self?.webViewHeight?.constant = height
self?.delegateObject?.moleculeDelegate?.moleculeLayoutUpdated(self!)
})
})
})
} else {
//get webview's content viewheight when no javescript setup
self.webViewHeight?.constant = webView.scrollView.contentSize.height
self.delegateObject?.moleculeDelegate?.moleculeLayoutUpdated(self)
}
}
public func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {