ios - WKWebView:无法更改字体大小

标签 ios swift wkwebview

问题:

我正在尝试调整显示在 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-scalemaximum-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/

相关文章:

ios - 分享状态 Facebook( objective-c )

ios - 是否有修改器可以更改 SwiftUI Picker 的标签颜色?

ios - UIPIckerView 未显示在所需位置

ios - WKWebView 和键盘外观 LayoutConstraints 错误的 Swift 问题

ios - 如何防止固定到底部的 HTML 元素在 iPhone 上的 WKWebView 中滚动

iphone - 使 UIView 更改其 super View (或 super View 的 super View )?

ios - popToViewController 抛出 NSRangeException

iphone - 应用不面向

ios - 如何从 swift3 中的堆栈中删除除一个 View Controller 之外的所有 View Controller

ios - 将视频嵌入到 UIView 中并停止它