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 dynamicHeight: Bool = true
var callHandlerName: String? var callHandlerName: String?
var webviewModel: WebViewModel? {
return model as? WebViewModel
}
override open func setupView() { override open func setupView() {
super.setupView() super.setupView()
@ -34,14 +37,6 @@ import WebKit
if let messageHandlerName = messageHandler { if let messageHandlerName = messageHandler {
wkUserController.add(self, name: messageHandlerName) 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 //server driven addition script
if let jsScript = jsScript { if let jsScript = jsScript {
@ -65,12 +60,11 @@ import WebKit
guard let model = model as? WebViewModel else { return } guard let model = model as? WebViewModel else { return }
self.delegateObject = delegateObject self.delegateObject = delegateObject
if model.callHandler != nil || model.jsScript != nil { if model.callHandler != nil || model.jsScript != nil {
/* /*
webView's configuration property is immutable. webView's configuration property is immutable.
In order to add call handler into webview, need to create a new webview. In order to add call handler into webview, need to create a new webview.
callHanlder */
*/
webView?.removeFromSuperview() webView?.removeFromSuperview()
let webView = createWebView(messageHandler: model.callHandler, jsScript:model.jsScript) let webView = createWebView(messageHandler: model.callHandler, jsScript:model.jsScript)
addSubview(webView) addSubview(webView)
@ -91,7 +85,6 @@ import WebKit
webView?.loadHTMLString(htmlString, baseURL: nil) webView?.loadHTMLString(htmlString, baseURL: nil)
} }
bringSubviewToFront(loadingSpinner) bringSubviewToFront(loadingSpinner)
//TO DO: local path?
} }
func pinSpinnerView() { func pinSpinnerView() {
@ -115,20 +108,29 @@ extension WebView : WKUIDelegate {
// hide loading // hide loading
loadingSpinner.pause() loadingSpinner.pause()
//update webview's heigth when webview is ready
if !dynamicHeight { if !dynamicHeight {
return return
} }
//update webview's heigth when webview is ready if let _ = webviewModel?.jsScript {
webView.evaluateJavaScript("document.readyState", completionHandler: { [weak self] (result, error) in /* evaluateJavaScript only works when webview contains userscrpt.
if result == nil || error != nil { otherwise, it would return WKErrorDomain Code=4 "A JavaScript exception occurred"
return */
} webView.evaluateJavaScript("document.readyState", completionHandler: { [weak self] (result, error) in
webView.evaluateJavaScript("document.body.scrollHeight", completionHandler: { (result, error) in if result == nil || error != nil {
guard let height = result as? CGFloat else { return } return
self?.webViewHeight?.constant = height }
self?.delegateObject?.moleculeDelegate?.moleculeLayoutUpdated(self!) 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!) { public func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {