programing

로컬 html 파일을 UI WebView에 로드하는 방법

showcode 2023. 4. 20. 23:21
반응형

로컬 html 파일을 UI WebView에 로드하는 방법

UI Web View에 html 파일을 로드하려고 하는데 작동하지 않습니다.다음은 무대입니다.프로젝트에 html_files라는 폴더가 있습니다.그런 다음 인터페이스 빌더에서 webView를 만들고 viewController에서 webView에 콘센트를 할당했습니다.다음은 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];
}

그러면 작동하지 않고 UI Web View가 비어 있습니다.도와주시면 감사하겠습니다.

아마도 다음과 같이 NSString을 사용하여 html 문서를 로드하는 것이 좋습니다.

목표-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불러.

EDIT 2016-05-27 - "범용 사이트 간 스크립팅 취약성"이 노출됩니다.로드하는 모든 자산을 소유하고 있는지 확인합니다.잘못된 스크립트를 로드하면 원하는 모든 스크립트를 로드할 수 있습니다.

로컬에서 작업하기 위해 상대 링크가 필요한 경우 다음을 사용하십시오.

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

번들은 찾을 프로젝트의 모든 하위 디렉토리를 검색합니다.my.html. (디렉토리 구조는 빌드 시에 평평해집니다)

한다면my.html태그가 붙어 있다<img src="some.png">webView가 로드됩니다.some.png당신의 프로젝트로부터.

이를 통해 프로젝트 자산(번들)에 있는 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]]];

이게 당신에게 도움이 될 수도 있어요.

당신이 해야 할 것 같아요.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];
}

간단한 복사 붙여넣기 코드 조각:

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

주의:

html 파일의 Target membership이 체크되어 있는지 확인합니다.그렇지 않으면 예외가 느려집니다:-

여기에 이미지 설명 입력

캡처되지 않은 예외로 인해 앱을 종료하는 중

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

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)
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];

여기에서는 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];

UI Webview에서 HTML 파일을 호출하는 요청 중 하나를 사용할 수 있습니다.

"html_files"가 Xcode의 그룹이 아니라 앱의 메인 번들에 있는 디렉토리인지 확인하십시오.

swift를 사용하여 이를 수행하는 새로운 방법입니다.UI Web View가 없어지고 WK Web View는 웹 페이지를 로드하는 새로운 클래스입니다.이것에 의해, 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)
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)

다음은 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 _ {
        }
    }
[[NSBundle mainBundle] pathForResource:@"marqueeMusic" ofType:@"html"];

늦어질 수도 있지만, 만약 그 파일이pathForResourcenil에 추가해야 합니다.Build Phases > Copy Bundle Resources.

여기에 이미지 설명 입력

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

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)

모든 파일(html 및 리소스)을 디렉토리에 저장합니다('수동'용).다음으로 디렉토리를 XCode로 드래그 앤 드롭하여 "Supporting Files" 위에 놓습니다.필요한 경우 항목 복사 및 폴더 참조 작성 옵션을 선택해야 합니다.다음으로 간단한 코드를 작성합니다.

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

「 」에 .@"manual/index", manual은 내 디렉토리 이름입니다!!다!!!영어가 서툴러서 미안해...

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

코스타리카의 홀라 데스 데 코스타리카Ponga los archivos(html y demas recurcos) un directorio(en mi caso llamé 매뉴얼), luego, arrastre y suelte en XCode, "지원 파일" 참조.Usted de be selectocionar las opciones "필요한 경우 항목 복사" y "폴더 참조 작성"

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

@"manual/index", manual es el nombre de mi directoryio!!

프로젝트가 커지면 HTML 페이지가 하위 폴더에 있는 파일을 참조할 수 있도록 구조가 필요할 수 있습니다.

html_files폴더를 Xcode로 설정하고 폴더 참조 작성 옵션을 선택합니다.다음 Swift 코드는 다음 코드를 통해WKWebView는, 의 폴더구조도 하고 있습니다.

import WebKit

@IBOutlet weak var webView: WKWebView!

if let path = Bundle.main.path(forResource: "sample", ofType: "html", inDirectory: "html_files") {
    webView.load( URLRequest(url: URL(fileURLWithPath: path)) )
}

, 만약에 이, 이, 이 이, 이, 이, 이, 이, 이, 이, 이, 이, 이, 이,sample.html에 「」가 되어 있습니다.<img src="subfolder/myimage.jpg"> 후 파일 "" " " " " " " "myimage.jpgsubfolder또한 로드되어 표시됩니다.

크레딧 : https://stackoverflow.com/a/8436281/4769344

언급URL : https://stackoverflow.com/questions/7063276/how-to-load-local-html-file-into-uiwebview

반응형