Завантажте локальний html в UIWebView, використовуючи swift


75

Цей зводить мене з розуму рано вранці. Я хочу завантажити локальний html у веб-перегляд:

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

Файл html знаходиться в кореневій папці мого проекту, але знаходиться всередині групи. Для мене веб-перегляд порожній. Будь-які ідеї, що не так? Я працюю на xcode 6.1 і запускаю цей приклад на своєму iphone 6.


Це може допомогти вам stackoverflow.com/questions/24591926 / ...
Jhondoe

Відповіді:


81

Щоб отримати URL-адреси для ресурсів програми, слід використовувати URLForResourceметод NSBundleclass.

Стрімкий 2

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

Стрімкий 3

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

Ловковим моментом є те, що це має бути "конфіденційність", а не "privacy.html". Це було причиною, чому вона не працювала для мене.
Проголосувати

просто додати .. чудово працює з Swift 4 і далі
androCoder-BD

27

Свіфт 3: тип сейфу

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

Майте на увазі: NS = Not Swift:]


Дякую @Peter Kreinz
Sébastien

чому завантаження займає кілька секунд?
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

Свіфт 3 з 3 рядками :)

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

9

Свіфт версії 2.1

цей випадок також включає кодування

// 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

Додайте локальний файл HTML у свій проект і назвіть його як home.html, а потім створіть NSURLRequest за допомогою об’єкта NSURL. Після передачі запиту до веб-перегляду він завантажить запитувану URL-адресу у веб-перегляд, і якщо ви не використовуєте розкадрування, додайте uiwebview до подання контролера перегляду, як показано нижче. 

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

Для отримання додаткової довідки зверніться до цього http://sourcefreeze.com/uiwebview-example-using-swift-in-ios/


5

Це працює для мене:

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

}

Додано App Transport Security Settingsз Dictionaryтипом у файл info.plist . Також доданий під ключ Allow Arbitrary Loadsдля параметрів безпеки транспорту додатків із типом Booleanта значеннямYES .

Ось підручник.

ВИДАЛЕНО

Для Swift 3 (Xcode 8)

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

3

Ви можете завантажити HTML-рядок або локальний html-файл в UIWebView.

Рядок 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)
}

Файл HTML:

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

Деталі можна знайти тут: http://webindream.com/load-html-uiwebview-using-swift/


як показати зображення в loadHtmlCode (), тому що я спробував, але зображення пусте, показуючи @farhad rubel
Tiwari

я спробував так, нехай htmlCode = "<html> <head> <title> Чудова мережа </title> </head> <body bgcolor = orange> <p> чудова мережа. завантаження HTML-коду в <strong> UIWebView </ strong > </p> <p> <img src = chania.jpg width = 200 height = 200> </p> </> </body> "
Діліп Тіварі

3

Ось стисла версія для Swift 4

1) Додати імпорт import WebKit

2) Додайте WebKit.frameworkу свій проект

введіть тут опис зображення

@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

Для швидкого 3 Використовуйте це:

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 завантажує HTML з файлу. UIWebView застарілий.

У програмах, що працюють в iOS 8 і пізніших версіях, використовуйте клас WKWebView замість 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

швидкі 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)

не забудьте додати це WKNavigationDelegate, WKUIDelegate


0

Це спрацювало для мене (Xcode 8, Swift 3)

@IBOutlet слабкий 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)
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.