SWIFT:如何加载本地图像远程 HTML

2024-01-09

目前我正在开发适用于 Android 和 iOS 的应用程序。这是一个简单的 webView,正在调用远程 URL。

这工作得很好 - 但现在我在弄清楚如何拦截图像的加载方面遇到了问题。 我正在努力实现以下目标: * 加载远程URL * 拦截加载并检查图像 * 如果图像存在于应用程序内(在某个文件夹中)则加载本地图像,否则从服务器加载远程图像

在 Android 上这非常简单:

public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
        try {
            if( url.endsWith("png") ) {
                return new WebResourceResponse("image/png", "ISO-8859-1", ctx.getAssets().open(url.substring(basepath.length())));
            }
            if( url.endsWith("jpg") ) {
                return new WebResourceResponse("image/jpg", "ISO-8859-1", ctx.getAssets().open(url.substring(basepath.length())));
            }
        } catch (IOException e) {
        }

        return super.shouldInterceptRequest(view, url);
    }

在 iOS 上——尤其是 SWIFT,我还没有找到解决方案。到目前为止,这就是我的 webView 的内容:

@IBOutlet var webView: UIWebView!
var urlpath = "http://stackoverflow.com"
func loadAddressURL(){
   let requesturl = NSURL(string: urlpath!)
   let request = NSURLRequest(URL: requesturl)
   webView.loadRequest(request) }

override func viewDidLoad() {
   super.viewDidLoad()
   loadAddressURL() }

谁能指出我如何实现上述结果的正确方向?

提前谢谢了。


你可以使用NSURLProtocol https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURLProtocol_Class/index.html,这是一个简单的例子:

  1. 子类NSURLProtocol

    class Interceptor: NSURLProtocol {
        override class func canonicalRequestForRequest(request: NSURLRequest) -> NSURLRequest {
            return request
        }
    
        override class func canInitWithRequest(request: NSURLRequest) -> Bool {
            // returns true for the requests we want to intercept (*.png)
            return request.URL.pathExtension == "png"
        }
    
        override func startLoading() {
            // a request for a png file starts loading
            // custom response
            let response = NSURLResponse(URL: request.URL, MIMEType: "image/png", expectedContentLength: -1, textEncodingName: nil)
    
            if let client = self.client {
                client.URLProtocol(self, didReceiveResponse: response, cacheStoragePolicy: .NotAllowed)
    
                // reply with data from a local file
                client.URLProtocol(self, didLoadData: NSData(contentsOfFile: "local file path")!)
    
                client.URLProtocolDidFinishLoading(self)
            }
        }
    
        override func stopLoading() {
        }
    }
    
  2. 在代码中的某个位置注册Interceptor class:

    NSURLProtocol.registerClass(Interceptor)
    

还有一篇不错的文章NSHipster http://nshipster.com/nsurlprotocol/如果你想了解更多NSURLProtocol.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SWIFT:如何加载本地图像远程 HTML 的相关文章

随机推荐

  • 如何进行内核线程通信?

    如何让内核模块中的线程进行通信 我正在编写一个内核模块 我的架构将使用三个需要通信的线程 到目前为止 我的研究使我相信唯一的方法是使用共享内存 声明全局变量 和锁定机制来同步线程之间的读 写 那里关于这方面的材料相当稀缺 我还有其他可以考虑
  • 当您的应用程序安装在 Android 上时,您可以运行 Intent 或脚本吗?

    例如 RPM 有 post postun pre preun 允许您编写在安装过程的不同阶段运行的脚本 我想做一些事情 比如在安装我的 Android 应用程序时创建和填充数据库 Ted 不 抱歉 这是明确不支持的
  • 将生成的进程的输出捕获到字符串

    背景 我正在开发一个程序 需要能够捕获stdout stderr以及程序的返回值 理想情况下 我希望将这些捕获到存储在对象内的字符串中 该对象保存过程的详细信息 我目前有一些代码 可以使用一些 在我看来 古老的 C 文件处理魔法将输出保存到
  • 向 AVM2 添加语言

    我对创建一种在 AVM2 上运行的语言很感兴趣 并且正在寻求从哪里开始的建议 我确实意识到这绝不是一项微不足道的任务 但我想尝试一下 至少在此过程中了解更多有关实现语言的知识 我一直在研究 ANTLR 并一直在阅读语言开发的语法问题 我正在
  • 我可以在循环内使用 useEffect 确保其尺寸恒定吗?

    我有一个功能性的 React 组件 更多的是非 React 对象的代理 如下所示 function ProxyComponent onEvent1 onEvent2 onEvent3 useEffect gt someObject on e
  • C# Windows 窗体自动关闭

    我有一个 Windows 应用程序 其中我的第一个 Windows 窗体是登录 成功登录后 必须打开 主页 表单 我在调试时看到 Home 表单 但是一旦代码进入 Home Designer cs 中的 Dispose 方法 我的应用程序就
  • Nodejs Express http 服务器如何处理并发请求?

    我正在构建一个 Node js 应用程序 并想了解如何处理并发请求 我构建了一个测试服务器 通过等待 10 秒来模拟高 CPU 负载 为了测试行为 我打开两个浏览器选项卡并同时刷新页面 const http require http con
  • Python:不同的空集列表

    我是一个Python新手 正在尝试为埃拉托斯特尼筛编写代码 为此 我必须初始化一个空集列表 我尝试这样做factors set 1001 但这会产生一个浅拷贝 我想要一个深拷贝 这样factors i and factors j 指向不同的
  • 如果我的应用程序是通过 ACTION_VIEW 启动的,我如何检索附加的数据?

    我已经让我的应用程序处理某种数据类型的 ACTION VIEW 意图 效果很好 我似乎无法弄清楚如何实际检测我的应用程序是否已以这种方式启动 以及如何获取附加数据 有人能指出我正确的方向吗 这是我的清单的摘录 如果有帮助的话
  • 将 XCTest 导入动态框架

    我有一个项目 我创建了一个动态框架 在框架本身 而不是框架的测试 内部 我有以下文件 import Foundation import XCTest public func assertThrowsException function th
  • 绘制包含 NaN 的 pandas 数据框

    我有来自三个不同 GPS 接收器的冰速 GPS 数据 数据位于 pandas 数据框中 索引为 Julian Day 从 2009 年初开始增量 这是数据的子集 主数据集有 3487235 行 R2 R7 R8 1235 000000 11
  • 如何在不使用扩展器的情况下将 WPF 工具栏绑定到我的 VM 中的集合

    我有一个 WPF 窗口 其中有ToolBar 我的虚拟机中有一组要绑定的对象 它们显示为按钮 但总是被推到扩展的下拉部分ToolBar 如何使这些按钮出现在标准部分ToolBar 我有以下 XAML
  • C# 从邮件附件中获取文件名

    我有一个简单的 C 应用程序 用于发送 SMTP 电子邮件 使用 System Net Mail 类 发送 通过电子邮件发送 MailMessage 对象后 我想遍历附件列表并删除与这些附件关联的原始文件 但是我很难找到与每个附件关联的完整
  • Flutter Web 应用程序在部署到 Firebase 托管后返回空白页面

    我已成功将我的 flutter Web 应用程序部署到 Firebase 托管 但是 当我访问链接时返回空白页面 这是我的 firebase json database rules database rules json firestore
  • Flutter:如何避免 ListView 动态滚动(或改变其物理特性)

    我有一个ListView https api flutter dev flutter widgets ListView class html小部件 我想允许它基于某些逻辑可滚动或不可滚动 NeverScrollable滚动物理 https
  • 对向量进行排序 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当对递增时 如何按降序对向量对进行排序
  • 如何对包装字符串的枚举变体进行模式匹配? [复制]

    这个问题在这里已经有答案了 我有一个枚举 enum T A String 我想匹配此枚举的变量 但此代码不起作用 match t T A a gt println a T A b gt println b gt println someth
  • 角度材质 (8) S2591:找不到名称“require”

    我正在尝试将日期 时间记录到 javascript 控制台中 我收到的错误消息如下 是由下面的代码生成的 ETA 该代码确实有效 日期将发送到控制台 仅保留错误消息 Message src app kdc services customer
  • Dockerfile 生产/构建/调试/测试环境

    假设您有 Web 应用程序和一些工作流程执行器 http server 提供预构建资产文件 生产 构建器 从源代码编译 捆绑 js css html 部署 开发 调试器 构建器 动态地从源构建 添加 js 源映射 开发 selenium 运
  • SWIFT:如何加载本地图像远程 HTML

    目前我正在开发适用于 Android 和 iOS 的应用程序 这是一个简单的 webView 正在调用远程 URL 这工作得很好 但现在我在弄清楚如何拦截图像的加载方面遇到了问题 我正在努力实现以下目标 加载远程URL 拦截加载并检查图像