使用iOS8 Swift XCode 6通过uiwebview将新样式表注入网站

时间:2015-02-10 14:33:31

标签: swift uiwebview ios8 xcode6

我在这里只看到了一些使用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,我如何在网站中注入一个全新的样式表,以便覆盖许多样式?

另外,我希望新的样式表存在于我的应用程序目录中。那个最好的目录在哪里?在“支持文件?”下而且,我如何在代码中调用该路径?

如果在应用样式之前不加载网站也会很好。

2 个答案:

答案 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)
}

使文件可用:

  1. 点击您的项目
  2. 点击目标
  3. 选择构建阶段
  4. 展开复制捆绑资源
  5. 点击“+”并选择您的文件。
  6. 还要确保您的控制器实现了WKNavigationDelegate:

    class ViewController: UIViewController, WKNavigationDelegate