我在这里只看到了一些使用Objective-C的选项,但是我在使用XCode 6中的Swift iOS8时遇到了麻烦。我正在使用uiwebview来加载一个网站。例如,让我们说它是google.com。
@IBOutlet var website: UIWebView!
var url = "http://www.google.com"
func loadUrl() {
let requestURL = NSURL(string: url)
let request = NSURLRequest(URL: requestURL!)
website.loadRequest(request)
}
override func viewDidLoad() {
super.viewDidLoad()
website.delegate = self
loadUrl()
}
func webViewDidFinishLoad(website: UIWebView) {
var jsscript = "some script here"
website.stringByEvaluatingJavaScriptFromString(jsscript)
}
使用Swift,我如何在网站中注入一个全新的样式表,以便覆盖许多样式?
另外,我希望新的样式表存在于我的应用程序目录中。那个最好的目录在哪里?在“支持文件?”下而且,我如何在代码中调用该路径?
如果在应用样式之前不加载网站也会很好。
答案 0 :(得分:4)
所以,我认为我找到了至少一种方法来完成使用Swift加载的网页的追加样式:
var loadStyles = "var script =
document.createElement('link');
script.type = 'text/css';
script.rel = 'stylesheet';
script.href = 'http://fake-url/styles.css';
document.getElementsByTagName('body')[0].appendChild(script);"
website.stringByEvaluatingJavaScriptFromString(loadStyles)
答案 1 :(得分:1)
使用现在首选的WKWebView,您可以将外部css文件(例如tweaks.css
)放在项目的根目录或子文件夹中,然后将其注入页面,如下所示:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
guard let path = Bundle.main.path(forResource: "tweaks", ofType: "css") else { return }
let css = try! String(contentsOfFile: path).replacingOccurrences(of: "\\n", with: "", options: .regularExpression)
let js = "var style = document.createElement('style'); style.innerHTML = '\(css)'; document.head.appendChild(style);"
webView.evaluateJavaScript(js)
}
使文件可用:
还要确保您的控制器实现了WKNavigationDelegate:
class ViewController: UIViewController, WKNavigationDelegate