首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将CSS插入到UIWebView / WKWebView中加载的超文本标记语言中

将CSS插入到UIWebView / WKWebView中加载的超文本标记语言中
EN

Stack Overflow用户
提问于 2015-10-14 18:37:03
回答 5查看 45.9K关注 0票数 42

我能够成功地将HTML内容显示到我的UIWebView中。

但希望通过添加外部CSS文件来自定义内容。我只能更改文本和字体的大小。我尝试了所有可能的解决方案来进行更改,但它不起作用-它没有显示任何更改。

下面是我的代码

代码语言:javascript
复制
HTMLNode* body = [parser body];
HTMLNode* mainContentNode = [body  findChildWithAttribute:@"id" matchingName:@"main_content" allowPartial:NO];
NSString *pageContent = [NSString stringWithFormat:@"%@%@", cssString, contentHtml];
        [webView loadHTMLString:pageContent baseURL:[NSURL URLWithString:@"http://www.example.org"]];

-(void)webViewDidFinishLoad:(UIWebView *)webView1{
    int fontSize = 50;
    NSString *font = [[NSString alloc] initWithFormat:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '%d%%'", fontSize];
    NSString *fontString = [[NSString alloc] initWithFormat:@"document.getElementById('body').style.fontFamily=\"helvetica\""];

    [webView1 stringByEvaluatingJavaScriptFromString:fontString];
    [webView1 stringByEvaluatingJavaScriptFromString:font];
}

请帮助我在我的视图中获得css样式表。

EN

回答 5

Stack Overflow用户

发布于 2018-11-04 20:56:49

由于UIWebView在iOS 12中已被弃用,因此我将只回答WKWebView。我已经实现了CSS加载,就像在公认的答案中描述的那样。问题是,有时从没有CSS的HTML过渡到有CSS的HTML是可见的。

我认为更好的方法是使用WKUserScript注入CSS,如下所示:

代码语言:javascript
复制
lazy var webView: WKWebView = {
    guard let path = Bundle.main.path(forResource: "style", ofType: "css") else {
        return WKWebView()
    }

    let cssString = try! String(contentsOfFile: path).components(separatedBy: .newlines).joined()
    let source = """
      var style = document.createElement('style');
      style.innerHTML = '\(cssString)';
      document.head.appendChild(style);
    """

    let userScript = WKUserScript(source: source,
                                  injectionTime: .atDocumentEnd,
                                  forMainFrameOnly: true)

    let userContentController = WKUserContentController()
    userContentController.addUserScript(userScript)

    let configuration = WKWebViewConfiguration()
    configuration.userContentController = userContentController

    let webView = WKWebView(frame: .zero,
                            configuration: configuration)
    return webView
}()

您可以在此blog post中阅读有关此方法的更多信息。

票数 24
EN

Stack Overflow用户

发布于 2018-12-12 20:07:37

与使用style标签应用css相比,最好使用link标签:

代码语言:javascript
复制
func insertContentsOfCSSFile2(into webView: WKWebView) {
    guard let path = Bundle.main.path(forResource: "resource", ofType: "css") else { return }                
    let csFile = "var head = document.getElementsByTagName('head')[0];var link = document.createElement('link'); link.rel = 'stylesheet';link.type = 'text/css';link.href = '\(path)';link.media = 'all';head.appendChild(link);"

    webView.evaluateJavaScript(csFile) {(result, error) in
        if let error = error {
            print(error)
        }
    }
}

我已经测试过了。它工作得很好。

票数 3
EN

Stack Overflow用户

发布于 2019-10-09 00:48:49

您需要将此标题添加到HTML的apple style之前

代码语言:javascript
复制
let fontName = UIFont.systemFont(ofSize: 17.0).fontName
    let htmlContent = """
    <header>
    <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no'>
    </header>
    <style type='text/css'>
    img{max-height: 100%; min-height: 100%; height:auto; max-width: 100%; width:auto;margin-bottom:5px;}
    p{text-align:left|right|center; line-height: 180%; font-family: '\(fontName)'; font-size: 17px;}
    iframe{width:100%; height:250px;}
    </style> \(html)
    """
    webView.loadHTMLString(htmlContent, baseURL: Bundle.main.bundleURL)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33123093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档