【问题标题】:Load local html into UIWebView using swift使用 swift 将本地 html 加载到 UIWebView
【发布时间】:2014-12-26 03:59:48
【问题描述】:

今天一大早就让我发疯了。我想将一些本地 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)
    }
}

html 文件位于我项目的根文件夹中,但在一个组内。 webview对我来说是空白的。有什么想法有什么问题吗?我在 xcode 6.1 上并在我的 iphone 6 上运行这个示例。

【问题讨论】:

标签: ios swift uiwebview


【解决方案1】:

要检索应用程序资源的 URL,您应该使用 NSBundle 类的 URLForResource 方法。

斯威夫特 2

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

斯威夫特 3

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

【讨论】:

  • 关键是它必须是“privacy”而不是“privacy.html”。这就是为什么它对我不起作用的原因。
  • 只是为了添加.. 与 Swift 4 及更高版本完美配合
【解决方案2】:

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

记住:NS = Not Swift :]

【讨论】:

  • 谢谢@Peter Kreinz
  • 为什么第一次加载需要几秒钟?
【解决方案3】:
// 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)

}

【讨论】:

  • 您好我正面临加载 HTML 文件的嵌套文件,例如:WKWebView 中的 CSS 文件。这是出于安全目的还是出于其他目的?
【解决方案4】:

Swift 3 3:)

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

【讨论】:

    【解决方案5】:

    Swift 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 {
    
    }
    

    【讨论】:

      【解决方案6】:

      将本地 HTML 文件添加到您的项目中并将该文件命名为 home.html,然后使用 NSURL 对象创建 NSURLRequest。之后将请求传递给 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)
          }
      

      更多参考请参考http://sourcefreeze.com/uiwebview-example-using-swift-in-ios/

      【讨论】:

        【解决方案7】:

        这对我有用:

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

        info.plist 文件中添加了 App Transport Security SettingsDictionary 类型。还为 App Transport Security Settings 添加了子键 Allow Arbitrary Loads,类型为 Boolean,值为 YES

        Here 是教程。

        已编辑

        对于 Swift 3 (Xcode 8)

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

        【讨论】:

          【解决方案8】:

          您可以在 UIWebView 中加载 html 字符串或本地 html 文件。

          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
          • 我试过这样 let htmlCode = " Wonderful web

            wonderful web. loading html code在 UIWebView

            >"
          【解决方案9】:

          这里是 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)
          }
          

          【讨论】:

            【解决方案10】:

            对于 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
                {
            
                }
            

            【讨论】:

              【解决方案11】:

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

              【讨论】:

                【解决方案12】:

                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)
                

                别忘了添加这个WKNavigationDelegate, WKUIDelegate

                【讨论】:

                  【解决方案13】:

                  这对我有用(Xcode 8、Swift 3)

                  @IBOutlet 弱变量 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)
                  }
                  

                  【讨论】:

                    猜你喜欢
                    • 2011-06-06
                    • 2011-10-27
                    • 1970-01-01
                    • 2017-03-22
                    • 2011-10-20
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-01-02
                    • 1970-01-01
                    相关资源
                    最近更新 更多