web-dev-qa-db-fra.com

Charger le code HTML local dans UIWebView en utilisant swift

Celui-ci me rend fou ce matin. Je veux charger du code HTML local dans une vue Web:

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

Le fichier html se trouve dans le dossier racine de mon projet mais se trouve dans un groupe La vue Web est vide pour moi. Des idées ce qui ne va pas? Je suis sur xcode 6.1 et lance cet exemple sur mon iphone 6.

65
Artjom Zabelin

Pour récupérer les URL des ressources d'application, vous devez utiliser la méthode URLForResource de la classe NSBundle.

Swift 2

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

Swift 3

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

Swift 3: tapez safe

@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")
    }
}

Gardez à l'esprit: NS = Not Swift:]

20
iLandes
// 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)

}
17
Jupiter Cls

Swift 3 avec3lignes :)

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

Swift version 2.1

ce cas inclut également le codage

// 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
Sruit A.Suk

Ajoutez le fichier HTML local à votre projet et nommez-le home.html, puis créez l'objet NSURLRequest à l'aide de l'objet NSURL. Après avoir transmis la demande à la vue Web, l'URL demandée sera chargée dans la vue Web. Si vous n'utilisez pas de storyboard, ajoutez uiwebview à la vue du contrôleur de la vue, comme le code ci-dessous.

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

Pour plus de références s'il vous plaît se référer à ceci http://sourcefreeze.com/uiwebview-example-using-Swift-in-ios/

6
Bharathi Devarasu

Cela a fonctionné pour moi:

@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")!)))

}

Ajout de App Transport Security Settings avec Dictionary dans le fichier info.plist. Également ajouté la sous-clé Allow Arbitrary Loads pour App Transport Security Settings avec le type Boolean et la valeur YES.

Ici est un tutoriel.

ÉDITÉ

Pour Swift 3 (Xcode 8)

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

Vous pouvez charger une chaîne html ou un fichier html local dans UIWebView. 

Chaîne HTML: 

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

Fichier HTML:

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

Les détails sont disponibles ici: http://webindream.com/load-html-uiwebview-using-Swift/

3
farhad rubel

Pour Swift 3, utilisez ceci:

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
xevser

Cela a fonctionné pour moi (Xcode 8, Swift 3)

@IBOutlet faible 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)
}
0
Diesel

Swift 4.2, Xcode 10.1, WKWebView charge le HTML à partir d'un fichier. UIWebView est obsolète.

Dans les applications qui s'exécutent dans iOS 8 et versions ultérieures, utilisez la classe WKWebView au lieu d'utiliser 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)
}
0
norbDEV

Swift 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)

n'oubliez pas d'ajouter ce WKNavigationDelegate, WKUIDelegate

0
Zouhair

Voici une version succincte de Swift 4

1) Ajouter import import WebKit

2) Ajoutez WebKit.framework dans votre projet

enter image description here

@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)
}
0
Aamir