我正在尝试调整WKWebView
中显示的文本/内容的大小。内容本身是从远程源(通过loadHTMLString
)加载的,因此我无法更改CSS。
我已经尝试了大多数其他可以在堆栈溢出上找到的解决方案(例如https://stackoverflow.com/a/43694902/1673377),但似乎都没有。
Xcode 9.2,Swift 4,iOS 10/11。
为了监控内容大小,我使用了从这里获取的代码:https://stackoverflow.com/a/41511422/1673377
lazy var webView: WKWebView = {
//Javascript string
let source = "window.onload=function () {window.webkit.messageHandlers.sizeNotification.postMessage({justLoaded:true,height: document.body.scrollHeight});};"
let source2 = "document.body.addEventListener( 'resize', incrementCounter); function incrementCounter() {window.webkit.messageHandlers.sizeNotification.postMessage({height: document.body.scrollHeight});};"
//UserScript object
let script = WKUserScript(source: source, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
let script2 = WKUserScript(source: source2, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
//Content Controller object
let controller = WKUserContentController()
//Add script to controller
controller.addUserScript(script)
controller.addUserScript(script2)
//Add message handler reference
controller.add(self, name: "sizeNotification")
//Create configuration
let configuration = WKWebViewConfiguration()
configuration.userContentController = controller
return WKWebView(frame: CGRect.zero, configuration: configuration)
}()
要禁用缩放,我还会评估以下JavaScript:
"var meta = document.createElement('meta');meta.setAttribute('name', 'viewport');meta.setAttribute('content', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no');document.getElementsByTagName('head')[0].appendChild(meta);"
(我尝试使用initial-scale
和maximum-scale
的值,但无济于事。)
非常感谢任何帮助!
答案 0 :(得分:6)
基本目标
如果你想改变字体大小,你需要一些CSS。因此,您的目标应该是在html标题中的某处注入以下2行:
<link rel='stylesheet' href='style.css' type='text/css'>
<meta name='viewport' content='initial-scale=1.0'/> // This may help with scale
如果您向项目添加style.css
文件,现在应该尊重它。
实际实施
我不知道您从服务器收到的html是如何配置的,但是在将其加载到WKWebView
之前,您可以尝试稍微操纵它:
let customHeader = <link rel='stylesheet' href='style.css' type='text/css'><meta name='viewport' content='initial-scale=1.0'/>
let newHtml = serverHtml.replacingOccurrences(of: "<head>", with: "<head>" + customHeader)