问题:
我正在尝试调整显示在 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
的值,但无济于事。)
如有任何帮助,我们将不胜感激!
最佳答案
基本目标
如果你想改变字体大小,你不知何故需要 CSS。因此,您的目标应该是在 html header 中的某处注入(inject)以下两行:
<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)
关于ios - WKWebView:无法更改字体大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49153541/