web-dev-qa-db-ja.com

ローカルhtmlファイルをUIWebViewにロードする方法

HtmlファイルをUIWebViewにロードしようとしていますが、動作しません。ステージは次のとおりです。プロジェクトにhtml_filesというフォルダーがあります。次に、インターフェイスビルダーでwebViewを作成し、viewControllerでアウトレットを割り当てました。これは、htmlファイルを追加するために使用しているコードです。

-(void)viewDidLoad
{
    NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html" inDirectory:@"html_files"];
    NSData *htmlData = [NSData dataWithContentsOfFile:htmlFile];
    [webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];
    [super viewDidLoad];
}

それは機能せず、UIWebViewは空白です。助けていただければ幸いです。

163
madcoderz

おそらく、NSStringを使用して、次のようにhtmlドキュメントをロードすることをお勧めします。

Objective-C

NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html"];
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
[webView loadHTMLString:htmlString baseURL: [[NSBundle mainBundle] bundleURL]];

スイフト

let htmlFile = NSBundle.mainBundle().pathForResource("fileName", ofType: "html")
let html = try? String(contentsOfFile: htmlFile!, encoding: NSUTF8StringEncoding)
webView.loadHTMLString(html!, baseURL: nil) 

Swift 3にはほとんど変更がありません:

let htmlFile = Bundle.main.path(forResource: "intro", ofType: "html")
let html = try? String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8)
webView.loadHTMLString(html!, baseURL: nil)

試しましたか?

また、リソースがpathForResource:ofType:inDirectory呼び出しによって検出されたことを確認します。

264
user478681

EDIT 2016-05-27- loadRequestは「ユニバーサルなクロスサイトスクリプティングの脆弱性」を暴露します。 必ずすべてを所有してくださいロードするアセット。悪いスクリプトをロードすると、必要なものは何でもロードできます。

ローカルで動作する相対リンクが必要な場合は、これを使用します:

NSURL *url = [[NSBundle mainBundle] URLForResource:@"my" withExtension:@"html"];
[webView loadRequest:[NSURLRequest requestWithURL:url]];

バンドルは、プロジェクトのすべてのサブディレクトリを検索して、my.htmlを見つけます。 (ディレクトリ構造はビルド時にフラット化されます)

my.html<img src="some.png">タグがある場合、webViewはプロジェクトからsome.pngをロードします。

89
Neal Ehardt

これにより、プロジェクトAssets(bundle)にあるhtmlファイルをwebViewにロードできます。

 UIWebView *web = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
    [web loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] 
                                pathForResource:@"test" ofType:@"html"]isDirectory:NO]]];

これはあなたに役立つかもしれません。

40
AJPatel

最初にallocateを初期化し、webviewを初期化する必要があると思います。

- (void)viewDidLoad
{
    NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"html" inDirectory:@"html_files"];
    NSData *htmlData = [NSData dataWithContentsOfFile:htmlFile];
    webView = [[UIWebView alloc] init];
    [webView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];

    [super viewDidLoad];
}
9
Saran

単純なコピー-貼り付けコードスニペット:

-(void)LoadLocalHtmlFile:(NSString *)fileName onWebVu:(UIWebView*)webVu
{
    [webVu loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:fileName ofType:@"html"]isDirectory:NO]]];
}

注:

Htmlファイルのターゲットメンバーシップがチェックされていることを確認してください。チェックされていない場合、次の例外がスローされます:-

enter image description here

キャッチされない例外によるアプリの終了

'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:isDirectory:]: nil string parameter'

8
Durai Amuthan.H

Swift 3およびSwift 4の場合:

let htmlFile = Bundle.main.path(forResource: "name_resource", ofType: "html")
let html = try! String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8)
self.webView.loadHTMLString(html, baseURL: nil)
6
pableiros
UIWebView *web=[[UIWebView alloc]initWithFrame:self.view.frame];
    //[self.view addSubview:web];
    NSString *filePath=[[NSBundle mainBundle]pathForResource:@"browser_demo" ofType:@"html" inDirectory:nil];
    [web loadRequest:[NSURLRequest requestWhttp://stackoverflow.com/review/first-postsithURL:[NSURL fileURLWithPath:filePath]]];

同じコードが機能しているため、HTMLファイルがUTF-8エンコーディングをサポートしていない可能性があります。

または、次のコード行も使用できます。

NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"Notes For Apple" ofType:@"htm" inDirectory:nil];
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
[WebView loadHTMLString:htmlString baseURL:nil];
4
user1173142

ここで、Jqueryを使用したHTMLファイルの処理方法。

 _webview=[[UIWebView alloc]initWithFrame:CGRectMake(0, 0, 320, 568)];
    [self.view addSubview:_webview];

    NSString *filePath=[[NSBundle mainBundle]pathForResource:@"jquery" ofType:@"html" inDirectory:nil];

    NSLog(@"%@",filePath);
    NSString *htmlstring=[NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];

    [_webview loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath]]];
                         or
    [_webview loadHTMLString:htmlstring baseURL:nil];

いずれかの要求を使用して、UIWebviewでHTMLファイルを呼び出すことができます

Swift iOS:

 // get server url from the plist directory
        var htmlFile = NSBundle.mainBundle().pathForResource("animation_bg", ofType: "html")!
        var htmlString = NSString(contentsOfFile: htmlFile, encoding: NSUTF8StringEncoding, error: nil)
        self.webView.loadHTMLString(htmlString, baseURL: nil)
3
Vinod Joshi
[[NSBundle mainBundle] pathForResource:@"marqueeMusic" ofType:@"html"];

遅いかもしれませんが、pathForResourceのファイルがnilである場合は、Build Phases > Copy Bundle Resourcesに追加する必要があります。

enter image description here

3
Atif Imran

「html_files」がXcodeの単なるグループではなく、アプリのメインバンドルのディレクトリであることを確認してください。

3
ppalancica

Swiftを使用してこれを行う新しい方法。 UIWebViewはもうありません。WKWebViewはWebページをロードするための新しいクラスです。これにより、Safariの機能がWebビューに追加されます。

    import WebKit

    let preferences = WKPreferences()
    preferences.javaScriptCanOpenWindowsAutomatically = false

    let configuration = WKWebViewConfiguration()
    configuration.preferences = preferences

    let webView = WKWebView(frame: self.view.bounds, configuration: configuration)
    let request = NSURLRequest(URL: NSURL(string: "http://nshipster.com"))
    webView.loadRequest(request)
3
iGo

Swift 3は次のとおりです。

    if let htmlFile = Bundle.main.path(forResource: "aa", ofType: "html"){
        do{
            let htmlString = try NSString(contentsOfFile: htmlFile, encoding:String.Encoding.utf8.rawValue )
            messageWebView.loadHTMLString(htmlString as String, baseURL: nil)
        }
        catch _ {
        }
    }
2
Jonesie
if let htmlFile = NSBundle.mainBundle().pathForResource("aa", ofType: "html"){
    do{
        let htmlString = try NSString(contentsOfFile: htmlFile, encoding:NSUTF8StringEncoding )
        webView.loadHTMLString(htmlString as String, baseURL: nil)
    }
    catch _ {
    }
}
1
ingconti

Swift 2.0では、@ user478681の答えは次のようになります。

    let HTMLDocumentPath = NSBundle.mainBundle().pathForResource("index", ofType: "html")
    let HTMLString: NSString?

    do {
        HTMLString = try NSString(contentsOfFile: HTMLDocumentPath!, encoding: NSUTF8StringEncoding)
    } catch {
        HTMLString = nil
    }

    myWebView.loadHTMLString(HTMLString as! String, baseURL: nil)
0
Thomas Jeans

すべてのファイル(htmlおよびリソース)をディレクトリに配置します(「マニュアル」用)。次に、「Supporting Files」の上にあるディレクトリをXCodeにドラッグアンドドロップします。 [必要に応じてアイテムをコピー]オプションと[フォルダー参照を作成]オプションを確認する必要があります。次に、簡単なコードを記述します。

NSURL *url = [[NSBundle mainBundle] URLForResource:@"manual/index" withExtension:@"html"];
[myWebView loadRequest:[NSURLRequest requestWithURL:url]];

@"manual/index"に注意してくださいmanualは私のディレクトリの名前です!!それだけです!!!!私の悪い英語でごめんなさい...

================================================== ======================

Hola desdeコスタリカ。 Ponga los archivos(html ydemásrecursos)およびun directorio(en mi caso lollamémanual)、luego、arrastre y suelte en XCode、sobre "Supporting Files"。必要なオプションの「必要に応じてアイテムをコピー」および「フォルダ参照を作成」。

NSURL *url = [[NSBundle mainBundle] URLForResource:@"manual/index" withExtension:@"html"];
[myWebView loadRequest:[NSURLRequest requestWithURL:url]];

Prestaatencióna @"manual/index"manual es el nombre de mi directorio !!