利用WebView加载文件的几种方式

1. 加载html资源

  1. 直接加载url 网络上的网页
    [self.webView loadRequest:
    [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.baidu.com"]]];
  1. 加载本地的html文件
    1. 利用fileURLWithPath 根据fileurl加载
    NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@test.html",NSTemporaryDirectory()]];
    [self.webView loadFileURL:url allowingReadAccessToURL:url];
2. 利用`loadHTMLString` 加载htmlString
     NSString *html = [NSString stringWithFormat:
@"<html><head lang='en'><meta charset='UTF-8'></head><body>   
 <div style='margin-top: 100px'><h1>图片显示测试</h1><p style='width:580px;height: 539px;background: blue' onclick='picCallback()'>[站外图片上传中……(2)]</p><input type='button' value='CallCamera' onclick='OCModel.showAlertMsg(1,2)'></div>
<script type='text/javascript'>var picCallback = function(photos) {alert('photos');}var shareCallback = function(){alert('success');}</script></body></html>"];
    // 用到的图片资源所在的路径
    NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@",NSTemporaryDirectory()]];
    [self.webView loadHTMLString:html baseURL:url];

注意:baseURL参数要传入资源文件的目录,比如html中使用到了'test.jpg',在tmp目录下。
3. - (nullable WKNavigation *)loadData:(NSData *)data MIMEType:(NSString *)MIMEType characterEncodingName:(NSString *)characterEncodingName baseURL:(NSURL *)baseURL加载data 此方法可以加载大部分别的格式

    NSString *path = [NSString stringWithFormat:@"%@test.html",NSTemporaryDirectory()];
    NSData *Data = [NSData dataWithContentsOfFile:path];
    [self.webView loadData:Data MIMEType:@"text/html" characterEncodingName:@"UTF-8" baseURL:[NSURL fileURLWithPath:NSTemporaryDirectory()]];

2. 加载其他类型资源(doc,txt,pdf)

上述用到的fileURLWithPath- loadData:(NSData *)data MIMEType:(NSString *)MIMEType characterEncodingName:(NSString *)characterEncodingName baseURL:(NSURL *)baseURL也可以用来加载其他资源文件

  • fileURLWithPath

txt文件

NSString *path = [[NSBundle mainBundle] pathForResource:@"readme" ofType:@"txt"];
[self.webView loadFileURL:[NSURL fileURLWithPath:path] allowingReadAccessToURL:[NSURL fileURLWithPath:path]];

doc文件

 NSString *path = [[NSBundle mainBundle] pathForResource:@"cwm.doc" ofType:nil];
 [self.webView loadFileURL:[NSURL fileURLWithPath:path] allowingReadAccessToURL:[NSURL fileURLWithPath:path]];

这里要注意一点,如果doc只在main bundle中使用的,拖入工程文件的时候可能会读取不到对应的path。

原因我们拉入其他资源文件(比如:图片、代码文件等)Xcode都会自动添加到target 的 "Build Phases" 下 "Copy Bundle Resources目录下,但是我们拉过来的文件这里是找不到的,可能是Xcode无法识别这类文件(当我们拉去过来时),所以我们要做的就是把刚才添加的doc文件加入该目录下

如下图


pdf文件

 NSString *path = [[NSBundle mainBundle] pathForResource:@"iOS" ofType:@"pdf"];
 [self.webView loadFileURL:[NSURL fileURLWithPath:path] allowingReadAccessToURL:[NSURL fileURLWithPath:path]];
  • - loadData:

txt文件

    NSString *path = [NSString stringWithFormat:@"%@readme.txt",NSTemporaryDirectory()];
    NSData *Data = [NSData dataWithContentsOfFile:path];
    [self.webView loadData:Data MIMEType:@"text/plain" characterEncodingName:@"UTF-8" baseURL:[NSURL fileURLWithPath:NSTemporaryDirectory()]];

doc文件

    NSString *path = [NSString stringWithFormat:@"%@cwm.doc",NSTemporaryDirectory()];
    NSData *Data = [NSData dataWithContentsOfFile:path];
    [self.webView loadData:Data MIMEType:@"application/vnd.openxmlformats-officedocument.wordprocessingml.document" characterEncodingName:@"UTF-8" baseURL:[NSURL fileURLWithPath:NSTemporaryDirectory()]];

pdf文件

    NSString *path = [NSString stringWithFormat:@"%@iOS.pdf",NSTemporaryDirectory()];
    NSData *Data = [NSData dataWithContentsOfFile:path];
    [self.webView loadData:Data MIMEType:@"application/pdf" characterEncodingName:@"UTF-8" baseURL:[NSURL fileURLWithPath:NSTemporaryDirectory()]];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 9,114评论 2 7
  • 一、 WebView简单介绍 WebView是iOS中比较常用的一个控件,特别是现在app不好推广,下载成本高的时...
    Onegeng阅读 14,631评论 1 11
  • UIWebView的三种加载方式和其代理API 提供了三种方法:1.- (void)loadRequest:(NS...
    JamesYi阅读 3,966评论 0 0
  • IOS之UIWebView的使用 刚接触IOS开发1年多,现在对于 混合式 移动端开发越来越流行,因为开发成本上、...
    学无止境666阅读 45,942评论 5 53
  • OS之UIWebView的使用 刚接触IOS开发1年多,现在对于 混合式 移动端开发越来越流行,因为开发成本上、速...
    知之未道阅读 5,550评论 0 4