Laden Sie lokales HTML mit Swift in UIWebView


74

Dieser macht mich heute früh verrückt. Ich möchte etwas lokales HTML in eine Webansicht laden:

class PrivacyController: UIViewController {

    @IBOutlet weak var webView:UIWebView!

    override func viewDidLoad() {
        let url = NSURL(fileURLWithPath: "privacy.html")
        let request = NSURLRequest(URL: url!)
        webView.loadRequest(request)
    }
}

Die HTML-Datei befindet sich im Stammordner meines Projekts, befindet sich jedoch in einer Gruppe. Die Webansicht ist für mich leer. Irgendwelche Ideen, was ist falsch? Ich bin auf xcode 6.1 und führe dieses Beispiel auf meinem iPhone 6 aus.


Antworten:


80

Zum Abrufen von URLs für Anwendungsressourcen, sollten Sie verwenden URLForResourceMethode der NSBundleKlasse.

Swift 2

let url = NSBundle.mainBundle().URLForResource("privacy", withExtension:"html") 

Swift 3

let url = Bundle.main.url(forResource: "privacy", withExtension: "html")

Der Haken ist, dass es "Datenschutz" und nicht "Datenschutz.html" sein muss. Dies war der Grund, warum es bei mir nicht funktionierte.
Upvote

nur um hinzuzufügen .. funktioniert perfekt mit Swift 4 und
höher

27

Swift 3: Typ sicher

@IBOutlet weak var webView: UIWebView!

override func viewDidLoad() {
    super.viewDidLoad()

    // Adding webView content
    do {
        guard let filePath = Bundle.main.path(forResource: "myFile", ofType: "html")
            else {
                // File Error
                print ("File reading error")
                return
        }

        let contents =  try String(contentsOfFile: filePath, encoding: .utf8)
        let baseUrl = URL(fileURLWithPath: filePath)
        webView.loadHTMLString(contents as String, baseURL: baseUrl)
    }
    catch {
        print ("File HTML error")
    }
}

Denken Sie daran: NS = Not Swift:]


Vielen Dank @Peter Kreinz
Sébastien REMY

Warum dauert das Laden beim ersten Mal einige Sekunden?
Codetard

17
// Point UIWebView
@IBOutlet weak var webView: UIWebView!

override func viewDidLoad() {
    super.viewDidLoad()

    //load a file
    var testHTML = NSBundle.mainBundle().pathForResource("privacy", ofType: "html")
    var contents = NSString(contentsOfFile: testHTML!, encoding: NSUTF8StringEncoding, error: nil)
    var baseUrl = NSURL(fileURLWithPath: testHTML!) //for load css file

    webView.loadHTMLString(contents, baseURL: baseUrl)

}

11

Swift 3 mit 3 Zeilen :)

if let url = Bundle.main.url(forResource: "privacy", withExtension: "html") {
    webview.loadRequest(URLRequest(url: url))
}

9

Schnelle Version 2.1

Dieser Fall umfasst auch die Codierung

// load HTML String with Encoding
let path = NSBundle.mainBundle().pathForResource("policy", ofType: "html")
do {
    let fileHtml = try NSString(contentsOfFile: path!, encoding: NSUTF8StringEncoding)
    webView.loadHTMLString(fileHtml as String, baseURL: nil)
}
catch {

}

8

Fügen Sie die lokale HTML-Datei zu Ihrem Projekt hinzu und benennen Sie diese Datei als home.html. Erstellen Sie dann die NSURLRequest mit dem NSURL-Objekt. Nachdem Sie die Anforderung an die Webansicht übergeben haben, wird die angeforderte URL in die Webansicht geladen. Wenn Sie kein Storyboard verwenden, fügen Sie die uiwebview wie im folgenden Code in die View-Controller-Ansicht ein. 

 override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let localfilePath = NSBundle.mainBundle().URLForResource("home", withExtension: "html");
        let myRequest = NSURLRequest(URL: localfilePath!);
        myWebView.loadRequest(myRequest);
        self.view.addSubview(myWebView)
    }

Weitere Informationen finden Sie unter http://sourcefreeze.com/uiwebview-example-using-swift-in-ios/.


5

Das funktioniert bei mir:

@IBOutlet weak var mWebView: UIWebView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    mWebView.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("fineName", ofType: "html")!)))

}

Hinzugefügt App Transport Security Settingsmit DictionaryTyp in info.plist Datei. Außerdem wurde ein Unterschlüssel Allow Arbitrary Loadsfür die App Transport-Sicherheitseinstellungen mit Typ Booleanund Wert hinzugefügt YES.

Hier ist ein Tutorial.

BEARBEITET

Für Swift 3 (Xcode 8)

mWebView.loadRequest(URLRequest(url: URL(fileURLWithPath: Bundle.main.path(forResource: "test/index", ofType: "html")!)))

3

Sie können eine HTML-Zeichenfolge oder eine lokale HTML-Datei in UIWebView laden.

HTML-Zeichenfolge:

func loadHtmlCode() {
    let htmlCode = "<html><head><title>Wonderful web</title></head> <body><p>wonderful web. loading html code in <strong>UIWebView</strong></></body>"
    webView.loadHTMLString(htmlCode, baseURL: nil)
}

HTML-Datei:

func loadHtmlFile() {
    let url = NSBundle.mainBundle().URLForResource("contactus", withExtension:"html")
    let request = NSURLRequest(URL: url!)
    webView.loadRequest(request)
}

Details finden Sie hier: http://webindream.com/load-html-uiwebview-using-swift/


Wie man ein Bild in loadHtmlCode () zeigt, weil ich es versucht habe, aber das Bild ist leer und zeigt @farhad rubel
Dilip Tiwari

Ich habe es so versucht. Lassen Sie htmlCode = "<html> <head> <title> Wunderbares Web </ title> </ head> <body bgcolor = orange> <p> Wunderbares Web. Laden von HTML-Code in <strong> UIWebView </ strong > </ p> <p> <img src = chania.jpg width = 200 height = 200> </ p> </> </ body> "
Dilip Tiwari

3

Hier ist eine kurze Version für Swift 4

1) Import hinzufügen import WebKit

2) Fügen Sie WebKit.frameworkIhr Projekt hinzu

Geben Sie hier die Bildbeschreibung ein

@IBOutlet weak var webView: WKWebView!

if let filePath = Bundle.main.url(forResource: "FILE_NAME", withExtension: "html") {
  let request = NSURLRequest(url: filePath)
  webView.load(request as URLRequest)
}

2

Für schnelle 3 Verwenden Sie diese:

do
    {
        let testHTML = Bundle.main.path(forResource: "about", ofType: "html")
        let contents =  try NSString(contentsOfFile: testHTML!, encoding: String.Encoding.utf8.rawValue)
        let baseUrl = NSURL(fileURLWithPath: testHTML!) //for load css file

        mWebView.loadHTMLString(contents as String, baseURL: baseUrl as URL)
    }
    catch
    {

    }

1

Swift 4.2, Xcode 10.1, WKWebView laden HTML aus der Datei. UIWebView ist veraltet.

Verwenden Sie in Apps, die unter iOS 8 und höher ausgeführt werden, die WKWebView-Klasse anstelle von UIWebView.

import WebKit

@IBOutlet weak var webView: WKWebView!

override func viewDidLoad() {
    super.viewDidLoad()

    let localFilePath = Bundle.main.url(forResource: "document_terms_of_use", withExtension: "html")
    let request = NSURLRequest(url: localFilePath!)
    webView.load(request as URLRequest)
}

1

schnell 4.2 & 5:

let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 1024, height: 768))
let url = URL(string: PERS_Path)
webView?.navigationDelegate = self
webView?.uiDelegate = self
webView!.loadFileURL(url!, allowingReadAccessTo: url!)
self.view. addSubview(webView)

Vergiss nicht, dies hinzuzufügen WKNavigationDelegate, WKUIDelegate


0

Das hat bei mir funktioniert (Xcode 8, Swift 3)

@IBOutlet schwach var webViewer: UIWebView!

override func viewDidLoad() {
    super.viewDidLoad()

    let localfilePath = Bundle.main.url(forResource: "homeInfo", withExtension: "html");
    let myRequest = NSURLRequest(url: localfilePath!);
    webViewer.loadRequest(myRequest as URLRequest);
    self.view.addSubview(webViewer)
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.