我正在尝试将一些本地css添加到我的webview中,但似乎我的应用程序中的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)
}
}
答案 0 :(得分:1)
您的HTML文件是从字符串加载的,因此它被加载到无法访问文件系统上的文件的Web视图中(可能是由于浏览器实现的同源策略)。它只能访问类似地通过loadHTMLString
注入的资源。
如果要使用本地CSS,请从文件而不是字符串加载HTML。如果它位于同一目录中,这将为Web视图提供对CSS的访问。
这是一个演示,首先,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)
}
}