简体   繁体   English

使用 swift 将本地 html 加载到 UIWebView

[英]Load local html into UIWebView using swift

This one is driving me crazy early this morning.今天一大早,这个让我发疯了。 I want to load some local html into a web view:我想将一些本地 html 加载到 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)
    }
}

The html file is located in the root folder of my project but is inside a group.该 html 文件位于我的项目的根文件夹中,但在一个组内。 The webview is blank for me. webview对我来说是空白的。 Any ideas whats wrong?有什么想法有什么问题吗? I am on xcode 6.1 and running this example on my iphone 6.我在 xcode 6.1 上并在我的 iphone 6 上运行这个示例。

To retrieve URLs for application resources, you should use URLForResource method of NSBundle class.要检索应用程序资源的 URL,您应该使用NSBundle类的URLForResource方法。

Swift 2斯威夫特 2

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

Swift 3斯威夫特 3

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

Swift 3: type safe Swift 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")
    }
}

Keep in mind: NS = Not Swift :]请记住:NS = 不是 Swift :]

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

}

Swift 3 with 3 lines :) Swift 3 3:)

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

Swift version 2.1斯威夫特 2.1 版

this case also include Encoding这种情况还包括编码

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

}

Add the local HTML file into your project and name that file as home.html, then create the NSURLRequest using NSURL object.将本地 HTML 文件添加到您的项目中并将该文件命名为 home.html,然后使用 NSURL 对象创建 NSURLRequest。 After that passing the request to web view it will load the requested URL into web view and if you are not using storyboard add the uiwebview into view controller view like the below code.之后将请求传递给 Web 视图,它将请求的 URL 加载到 Web 视图中,如果您不使用情节提要,请将 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)
    }

For more reference please refer this https://sourcefreeze.com/uiwebview-example-using-swift-in-ios/有关更多参考,请参阅此https://sourcefreeze.com/uiwebview-example-using-swift-in-ios/

This is worked for me:这对我有用:

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

}

Added App Transport Security Settings with Dictionary type in info.plist file.info.plist文件中添加了Dictionary类型的App Transport Security Settings Also added sub key Allow Arbitrary Loads for App Transport Security Settings with type Boolean and value YES .还添加了子键Allow Arbitrary Loads for App Transport Security Settings ,类型为Boolean ,值为YES

Here is tutorial.这里是教程。

EDITED已编辑

For Swift 3 (Xcode 8)对于 Swift 3 (Xcode 8)

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

Here is succinct version for Swift 4这是Swift 4的简洁版本

1) Add import import WebKit 1)添加导入import WebKit

2) Add WebKit.framework in your project 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)
}

You can load html string or local html file in UIWebView.您可以在 UIWebView 中加载 html 字符串或本地 html 文件。

HTML string: 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 file: HTML 文件:

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

Details can be found here: http://webindream.com/load-html-uiwebview-using-swift/详细信息可以在这里找到: http ://webindream.com/load-html-uiwebview-using-swift/

For swift 3 Use this:对于 swift 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
    {

    }

Swift 4.2, Xcode 10.1, WKWebView load HTML from file. Swift 4.2、Xcode 10.1、WKWebView 从文件中加载 HTML。 UIWebView is deprecated. UIWebView 已弃用。

In apps that run in iOS 8 and later, use the WKWebView class instead of using 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)
}

swift 4.2 & 5:斯威夫特 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)

don't forget to add this WKNavigationDelegate, WKUIDelegate不要忘记添加这个WKNavigationDelegate, WKUIDelegate

This worked for me (Xcode 8, Swift 3)这对我有用(Xcode 8,Swift 3)

@IBOutlet weak var webViewer: UIWebView! @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)
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM