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.

Upvote
quelle
Dies kann Ihnen helfen, stackoverflow.com/questions/24591926/…
Jhondoe

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")
Rintaro
quelle
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:]

Sébastien REMY
quelle
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)

}
Jupiter Cls
quelle
11

Swift 3 mit 3 Zeilen :)

if let url = Bundle.main.url(forResource: "privacy", withExtension: "html") {
    webview.loadRequest(URLRequest(url: url))
}
MBH
quelle
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 {

}
Obst A.Suk
quelle
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/.

Bharathi Devarasu
quelle
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")!)))
Abduhafiz
quelle
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/

Farhad Rubel
quelle
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)
}
Aamir
quelle
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
    {

    }
xevser
quelle
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)
}
norbDEV
quelle
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

Zouhair Sassi
quelle
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)
}
Diesel
quelle