2016-01-04 13 views
8

a Swift 2.1.1 & Xcode 7.1
Il mio codice usa WKWebView e carichi index.html formare un file locale, ma non riesce a caricare index.css e altri file JavaScript come mostrato nella testa etichetta.Caricamento di file CSS e js locali in WKWebView

La mia ipotesi migliore è che il valore baseURL non sia corretto, in tal caso, come posso impostare correttamente il baseURL? Grazie

import UIKit 
import WebKit 

class ViewController: UIViewController { 
@IBOutlet var containerView: UIView! = nil //allows the class to refrence WKWebView 
var webView: WKWebView? 

override func loadView() { 
    super.loadView() 

    self.webView = WKWebView() 
    self.view = self.webView! 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let HTMLDocumentPath = NSBundle.mainBundle().pathForResource("index", ofType: "html") 
    let HTMLString: NSString? 

    do { 
     HTMLString = try NSString(contentsOfFile: HTMLDocumentPath!, encoding: NSUTF8StringEncoding) 
     let baseUrl = NSURL.fileURLWithPath("") 
     webView!.loadHTMLString(HTMLString as! String, baseURL: baseUrl) 

    } catch { 
     HTMLString = nil 
    } 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

}

<head> 
 
     <meta charset="UTF-8"> 
 
     <title>RRR</title> 
 
     <link rel="stylesheet" href="jquery.mobile-1.4.5.css"/> 
 
     <link rel="stylesheet" href="index.css"/> 
 
     <script src="jquery-1.11.3.js"></script> 
 
     <script src="jquery.mobile-1.4.5.js"></script> 
 
     <meta name="viewport" content="width=device-width"/> 
 
    </head>

enter image description here

risposta

6

Dopo un po 'di lettura here circa l'URL del file sono stato in grado di risolvere il problema.

Ecco il codice

import UIKit 
import WebKit 

class ViewController: UIViewController { 
@IBOutlet var containerView: UIView! = nil //allows the class to refrence WKWebView 
var webView: WKWebView? 

override func loadView() { 
    super.loadView() 

    self.webView = WKWebView() 
    self.view = self.webView! 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let baseUrl = NSURL(string: "file:///<yourFilePath>/abc/") 
    let path = NSBundle.mainBundle().pathForResource("abc/index", ofType: "html") 
    let HTMLString: NSString? 

    do { 
     HTMLString = try NSString(contentsOfFile: path!, encoding: NSUTF8StringEncoding) 
     webView!.loadHTMLString(HTMLString as! String, baseURL: baseUrl) 

    } catch { 
     HTMLString = nil 
    } 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 
} 
+3

Salve, si può descrivere esattamente quale percorso si è utilizzato invece di 'file: /// /abc /'? Grazie –

+0

È importante che baseUrl inizi con 'file: //', il filePath esatto non è così importante –

+0

Bundle.main.bundlePath (Swift 3) –