web-dev-qa-db-ja.com

swiftを使用して、ローカルhtmlをUIWebViewにロードします

これは今朝早く私を狂わせます。ローカル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ファイルはプロジェクトのルートフォルダーにありますが、グループ内にあります。 Webビューは空白です。何かアイデアは間違っていますか?私はxcode 6.1を使用しており、この例をiPhone 6で実行しています。

67
Artjom Zabelin

アプリケーションリソースのURLを取得するには、URLForResourceクラスのNSBundleメソッドを使用する必要があります。

スイフト2

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

Swift

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

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 = Swiftではありません:]

23
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 with 3 lines :)

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

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 {

}
9
Sruit A.Suk

ローカルHTMLファイルをプロジェクトに追加し、そのファイルにhome.htmlという名前を付けてから、NSURLオブジェクトを使用してNSURLRequestを作成します。要求をWebビューに渡すと、要求されたURLがWebビューにロードされ、ストーリーボードを使用していない場合は、以下のコードのように、uiwebviewをView Controllerビューに追加します。

 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ファイルにDictionaryタイプのApp Transport Security Settingsを追加しました。タイプBooleanおよび値YESApp Transport Security SettingsのサブキーAllow Arbitrary Loadsも追加されました。

ここ はチュートリアルです。

編集済み

Swift 3(Xcode 8)の場合

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

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/

3
farhad rubel

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
    {

    }
1
xevser

これは私のために働いた(Xcode 8、Swift 3)

@IBOutlet weak 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はファイルからHTMLをロードします。 UIWebViewは非推奨です。

IOS 8以降で実行されるアプリでは、UIWebViewを使用する代わりにWKWebViewクラスを使用します。

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)

これを追加することを忘れないでくださいWKNavigationDelegate, WKUIDelegate

0
Zouhair Sassi

以下はSwift 4の簡潔なバージョンです

1)インポートimport WebKitを追加します

2)プロジェクトにWebKit.frameworkを追加します

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