热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

swift加载本地html和网络路径

先上代码:xcode9.4 ios11.4importUIKitimportWebKitclassRootViewController:UIViewController,WKNav

先上代码: xcode 9.4  ios 11.4

import UIKit
import WebKit

class RootViewController: UIViewController, WKNavigationDelegate {
    var webView: WKWebView!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // 创建视图
        let screen = UIScreen.main.bounds
        // 按钮栏
        let buttonBarWidth:CGFloat = 316
        let buttonBar = UIView(frame: CGRect(x: (screen.size.width - buttonBarWidth)/2, y: 20, width:buttonBarWidth, height: 70))
        self.view.addSubview(buttonBar)
        
        let width = buttonBar.frame.size.width / 2 - 10
    //添加按钮
        let buttOnHTML= UIButton(type: UIButtonType.system)
        buttonHTML.setTitle("通过路径加载", for: UIControlState())
        buttonHTML.frame = CGRect(x:0, y:0, width: width, height: 30)
        //添加事件
        buttonHTML.addTarget(self, action: #selector(buttonHTML(_:)), for: .touchUpInside)
        buttonBar.addSubview(buttonHTML)
    
    //添加 loadHTMLString 按钮
        let loadHTMLString = UIButton(type: UIButtonType.system)
        loadHTMLString.setTitle("loadHTMLString", for: UIControlState())
        loadHTMLString.frame = CGRect(x: width + 10, y:0, width: width, height: 30)
        //添加事件
        loadHTMLString.addTarget(self, action: #selector(loadHTMLString(_:)), for: .touchUpInside)
        buttonBar.addSubview(loadHTMLString)
        
    //添加loadData按钮
        let loadData = UIButton(type: UIButtonType.system)
        loadData.setTitle("loadData", for: UIControlState())
        loadData.frame = CGRect(x:0, y: 40, width: width, height: 30)
        //添加事件
        loadData.addTarget(self, action: #selector(loadData(_:)), for: .touchUpInside)
        buttonBar.addSubview(loadData)
        
    //添加loadRequest按钮--- 加载网络地址
        let loadRequest = UIButton(type: UIButtonType.system)
        loadRequest.setTitle("loadRequest", for: UIControlState())
        loadRequest.frame = CGRect(x: width + 10, y: 40, width: width, height: 30)
        //添加事件
        loadRequest.addTarget(self, action: #selector(loadRequest(_:)), for: .touchUpInside)
        buttonBar.addSubview(loadRequest)
        
    //添加WKWebView
        self.webView = WKWebView(frame: CGRect(x:0, y: 100, width: screen.size.width, height: screen.size.height - 100 ))
        self.view.addSubview(webView)
    }
    // 加载本地html 点击事件
    @objc func buttonHTML(_ sender: AnyObject){
        // 方法一 加载路径
        let htmlPath = Bundle.main.path(forResource: "index", ofType: "html")
        if let htmlPath =  htmlPath {
            let url = URL.init(fileURLWithPath: htmlPath) // 把字符串 转成 URL 类型
            let request = URLRequest(url: url)
            self.webView.load(request)
            self.webView.navigationDelegate = self
        }
        // 方法二 加载路径
        //        let htmlPath = Bundle.main.url(forResource: "index", withExtension: "html")
        //        if let htmlPath = htmlPath{
        //            let request = URLRequest(url: htmlPath)
        //            self.webView.load(request)
        //            self.webView.navigatiOnDelegate= self
        //        }
    }
    // loadHTMLString
    @objc func loadHTMLString(_ sender: AnyObject){
        // 方法一 直接加载 html 字符串
        //        let bundleUrl = NSURL.fileURL(withPath: Bundle.main.bundlePath)
        //        self.webView.loadHTMLString("

测试标题

", baseURL: bundleUrl)
// 方法二 把本地文件转成字符串,进行加载 let htmlPath = Bundle.main.path(forResource: "index2", ofType: "html") let bundleUrl = NSURL.fileURL(withPath: Bundle.main.bundlePath) do{ let html = try NSString(contentsOfFile: htmlPath!, encoding: String.Encoding.utf8.rawValue) self.webView.loadHTMLString(html as String, baseURL: bundleUrl) }catch let err as NSError{ err.description } } // loadData 方式加载 -- > loadData 已经转换成--> load @objc func loadData(_ sender: AnyObject){ let htmlPath = Bundle.main.path(forResource: "index3", ofType: "html") let bundleUrl = NSURL.fileURL(withPath: Bundle.main.bundlePath) let htmlData = NSData(contentsOfFile: htmlPath!) // NSData 要先转换成 Data 类型 self.webView.load(htmlData! as Data, mimeType: "text/html", characterEncodingName: "utf-8", baseURL: bundleUrl) } // loadRequest 加载网络路径 ---> loadRequest 已经改为 load , NSURL --> URL,NSURLRequest --> URLRequest @objc func loadRequest(_ sender: AnyObject){ let url = URL(string: "https://baidu.com") let request = URLRequest(url: url!) self.webView.load(request) self.webView.navigationDelegate = self } // 委托协议的监听方法 func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) { print("开始加载") } func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) { print("内容开始返回") } func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { print("加载完成") } func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) { print("加载失败 error:" + error.localizedDescription) } }

上面 有四种方式 加载html 网页,

加载本地 html 的方法 有:

  1. buttonHTML
  2. loadHTMLString
  3. loadData
加载网络路径
  loadRequest

案例中每一种方法都可以加载成功,加载方式大同小异
swift 加载 本地html 和 网络路径

加载本地文件,会自动去找到文件,如上图 2 个静态文件夹,里面没找到就会寻找外面的静态文件夹。

加载网络资源会报错处理一下就好:https://www.cnblogs.com/bruce-gou/p/10517044.html
以上的方式 文件夹是通过 NEW Group 的方式创建的。
如果是 通过菜单 Add Files to 这种方式创建的 则不可以。这种方式创建的文件夹是蓝色的如图

swift 加载 本地html 和 网络路径


swift 加载 本地html 和 网络路径


通过以上方式创建的文件,通过 Bundle.main.path(forResource: "index", ofType: "html") 取不到路径
    @objc func test(_ sender: AnyObject){
        let bundlePath = Bundle.main.bundlePath
        let path = "file://\(bundlePath)/assets/index.html"
        let url = URL(string: path);
        let request = URLRequest(url: url!)
        self.webView.load(request)
    }

这样就可以取到路径值,就可以正常加载






 


推荐阅读
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • QT框架中事件循环机制及事件分发类详解
    在QT框架中,QCoreApplication类作为事件循环的核心组件,为应用程序提供了基础的事件处理机制。该类继承自QObject,负责管理和调度各种事件,确保程序能够响应用户操作和其他系统事件。通过事件循环,QCoreApplication实现了高效的事件分发和处理,使得应用程序能够保持流畅的运行状态。此外,QCoreApplication还提供了多种方法和信号槽机制,方便开发者进行事件的定制和扩展。 ... [详细]
  • 使用jqTransform插件美化表单
    jqTransform 是由 DFC Engineering 开发的一款 jQuery 插件,专用于美化表单元素,操作简便,能够美化包括输入框、单选按钮、多行文本域、下拉选择框和复选框在内的所有表单元素。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 在List和Set集合中存储Object类型的数据元素 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
author-avatar
KristenW_ong_湘
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有