SWIFT - 正在加载本地 CSS 文件

SWIFT - Loading local CSS file

我正在尝试将一些本地 css 添加到我的网络视图,但我的应用程序中的 css 文件似乎有问题:

当我尝试从本地 css 文件加载 css 时没有任何反应,但是当我用在线 css 文件替换 '%@' 时它工作正常。

感谢您的帮助。

import UIKit

class ViewController: UIViewController, UIWebViewDelegate {

    @IBOutlet weak var webview: UIWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        webview.delegate = self

        let html: String! = "<html><head></head><body><div id=\"postcontent\"><h1>Hello</h1></div></body></html>"

        webview.loadHTMLString(html, baseURL: nil)
    }

    func webViewDidFinishLoad(_ webView: UIWebView){
        let path = Bundle.main.path(forResource: "styles", ofType: "css")

        let javaScriptStr: NSString = "var link = document.createElement('link'); link.href = '%@'; link.rel = 'stylesheet'; document.head.appendChild(link)"
        let javaScripthPath = NSString(format: javaScriptStr, path!)
        webview.stringByEvaluatingJavaScript(from: javaScripthPath as String)
        print(javaScripthPath)
    }
}

您的 HTML 文件是从字符串加载的,因此它被加载到无法访问文件系统上的文件的 Web 视图中(可能是由于浏览器实施的同源策略)。它只能访问类似通过 loadHTMLString.

注入的资源

如果您想使用本地 CSS,请从文件而不是字符串加载您的 HTML。如果 CSS 在同一目录中,这将使 Web 视图能够访问它。

这是一个演示,首先,HTML现在是一个文件。

那么,您的代码可以如下所示:

class ViewController: UIViewController, UIWebViewDelegate {

    @IBOutlet weak var webview: UIWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        webview.delegate = self

        let path = Bundle.main.path(forResource: "app", ofType: "html")!
        let url = URL(fileURLWithPath: path)
        let request = URLRequest(url: url)

        webview.loadRequest(request)
    }

    func webViewDidFinishLoad(_ webView: UIWebView){
        let path = Bundle.main.path(forResource: "styles", ofType: "css")!

        let javaScriptStr = "var link = document.createElement('link'); link.href = '\(path)'; link.rel = 'stylesheet'; document.head.appendChild(link)"
        webview.stringByEvaluatingJavaScript(from: javaScriptStr)
    }
}