尽管成功加载了URL中的HTML内容,如何从WKWebView中的URL中插入CSS

时间:2018-10-30 07:30:09

标签: objective-c swift4 wkwebview

我搜索并找到了很多帖子,这些帖子可以让我从bundle或String中加载CSS文件。但是我的CSS文件保存在我们的服务器上。 我想从URL加载CSS。我尝试了很多方法,但对我没有用。 尽管我可以从Objective C代码的UIWebView中的同一URL插入CSS,但是在SWIFT的WKWebView中尝试实现相同的目标时却遇到了问题。我认为我在编写HTML标签时犯了一些语法错误。请帮帮我

这是目标C的代码:

NSString *html = [NSString stringWithFormat:@"<link type=\"text/css\" href=\"%@\" rel=\"stylesheet\" /> %@<br>", htmlData.cssStr,[htmlData.contentsArr objectAtIndex:slideNo]];
NSLog(@"html .%@", html);
[webview loadHTMLString:html baseURL:nil];

htmlData.cssStr:它是一个Web链接

与大多数解决方案一样,将CSS插入到func webView的SWIFT中(_ webView:WKWebView,didFinish导航:WKNavigation!)。所以我也从WKWebView的didFinish调用insertContentsOfCSSFile。 我在SWIFT中的尝试方式是:

func insertContentsOfCSSFile(into webView: WKWebView) {

    let cssString = try! String(contentsOf: URL(string:  self.htmlData.cssStr)!).trimmingCharacters(in: .whitespacesAndNewlines)
    print("cssString", cssString)
    let jsString = "var style = document.createElement('style'); style.innerHTML = '\(cssString)'; document.head.appendChild(style);"
        webView.evaluateJavaScript(jsString, completionHandler: nil)

}

1 个答案:

答案 0 :(得分:0)

在您的HTML中,您需要父标记,例如HTML,Head,Body等。请尝试以下代码。以及您想要的更改。

NSString *bodyTag = [NSString stringWithFormat:@"<body><div id='main-div'>%@</div></body>",[htmlData.contentsArr objectAtIndex:slideNo]]; // Pass Var -> body value
NSString *css = [NSString stringWithFormat:@"<link type=\"text/css\" href=\"%@\" rel=\"stylesheet\" />", htmlData.cssStr];

NSString *htmlString = [NSString stringWithFormat:@"<!DOCTYPE html><html xmlns='https://www.w3.org/1999/xhtml'><head>  <meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><meta name = \"viewport\" content = \"width = 320, initial-scale = 1.0, user-scalable = yes\"><link href=\"%@\" rel=\"stylesheet\" type=\"text/css\" /></head>%@</html>", css, bodyTag]; // Pass Var -> css url and bodyTag