当前位置: > > > Swift - 网页控件(UIWebView)加载本地数据,文件

Swift - 网页控件(UIWebView)加载本地数据,文件

使用UIWebView加载本地数据或资源有如下三种方式:
1,使用 loadHTMLString 方法加载HTML内容
2,使用 loadRequest 方法加载本地资源(也可用于加载服务器资源)
3,先将内容保存成 Data 数据,再使用 load 方法加载

使用样例
通过 UISegmentedControl 分别控制网页控件“显示HTML”“显示PDF”“loadData显示PDF”
            

代码如下:
import UIKit

class ViewController: UIViewController {
    
    @IBOutlet var webview:UIWebView!
    @IBOutlet var loadtype:UISegmentedControl!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //默认选中分段控件的第一项
        loadtype.selectedSegmentIndex = 0
        typeChanged(loadtype)
    }
    
    @IBAction func typeChanged(_ sender:UISegmentedControl)
    {
        let index = sender.selectedSegmentIndex
        print(index)
        switch index
        {
        case 0: //在 UIWebView 中显示 HTML 内容
            let html = "<h1>欢迎来到:<a href='http://hangge.com'>航歌</a></h1>";
            webview.loadHTMLString(html,baseURL:nil)
        case 1: //在 UIWebView 中显示 PDF
            let path = Bundle.main.path(forResource: "test1", ofType:"pdf")
            let urlStr = URL(fileURLWithPath: path!)
            print(urlStr)
            webview.loadRequest(URLRequest(url:urlStr))
        case 2: //在 UIWebView 中显示 PDF, 但是是通过 loadData 方式加载
            let path = Bundle.main.path(forResource: "test1", ofType:"pdf")
            let urlStr = URL(fileURLWithPath: path!)
            let data = try! Data(contentsOf: urlStr)
            webview.load(data, mimeType: "application/pdf", textEncodingName: "utf-8",
                         baseURL: NSURL() as URL)
        default:
            print("是不是出错了?")
        }
    }
}
源码下载hangge_549.zip

2016-09-23更新:代码现已升级至Swfit3版本
评论5
  • 5楼
    2017-08-31 10:27

    站长,有个问题:我用let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]取沙盒路径下面的文档,但是我的文档是中文名的(比如:模板.pdf),然后获取到这个文件:let filePath = "\(documentsPath)/\("模板.pdf")",但是在转换成URL的时候let myUrl = URL(fileURLWithPath: filePath),得到的这个myUrl最后的文件名是乱码的,请问怎么解决啊?PS:最后用webView加载

    站长回复

    我测试了下用中文名也是可以正常读取的,不知道你那边什么情况。

    let path = NSHomeDirectory() + "/Documents/中文.pdf"
    let urlStr = URL(fileURLWithPath: path)
    webview.loadRequest(URLRequest(url:urlStr))

  • 4楼
    2017-08-22 11:17
    lb

    航哥你好,请问一下,我想要要修改HTML里面的style属性,该怎么做呢?

    站长回复

    UIWebView 组件有个 stringByEvaluatingJavaScript 方法,这个方法可以在html页面上执行任意 js 语句,当然通过 js 修改 style 是可以的。

  • 3楼
    2016-08-02 18:15
    火麒麟

    航哥,webview.loadRequest超时设置是如何设置的啊?

    站长回复

    URLRequest第三个参数可以设置超时时间。比如下面设置15秒超时:
    let request = URLRequest(url: url!, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 15)

  • 2楼
    2016-06-27 15:35
    83861625

    webview加载完成有没有监听

    站长回复

    webViewDidFinishLoad代理方法可以实现加载完毕后的监听响应。具体参考我原来写的这篇文章:Swift - 使用UIWebView和UIToolbar制作一个浏览器

  • 1楼
    2016-03-11 11:39
    铁皮

    航哥,case 0 和case 1 没有内容显示是什么情况,case 2 的pdf可以显示

    站长回复

    这个我也不太清楚,我刚测试了下是没问题的。