首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将HTML字符串下载到iOS中的NSString或Swift String变量中

在iOS开发中,可以使用WKWebViewUIWebView来加载HTML字符串,并使用JavaScript与原生代码交互,将HTML字符串转换为NSStringSwift String变量。

以下是使用WKWebView的示例代码:

代码语言:swift
复制
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {
    var webView: WKWebView!
    var htmlString: String!

    override func viewDidLoad() {
        super.viewDidLoad()

        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.navigationDelegate = self
        view.addSubview(webView)

        let layoutGuide = view.safeAreaLayoutGuide
        webView.translatesAutoresizingMaskIntoConstraints = false
        webView.leadingAnchor.constraint(equalTo: layoutGuide.leadingAnchor).isActive = true
        webView.trailingAnchor.constraint(equalTo: layoutGuide.trailingAnchor).isActive = true
        webView.topAnchor.constraint(equalTo: layoutGuide.topAnchor).isActive = true
        webView.bottomAnchor.constraint(equalTo: layoutGuide.bottomAnchor).isActive = true

        let htmlContent = "<html><body><p>Hello, World!</p></body></html>"
        webView.loadHTMLString(htmlContent, baseURL: nil)
    }

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        webView.evaluateJavaScript("document.body.innerHTML") { (result, error) in
            if let result = result as? String {
                self.htmlString = result
                print(self.htmlString)
            }
        }
    }
}

在上面的代码中,我们创建了一个WKWebView实例,并使用loadHTMLString方法加载HTML字符串。在webView(_:didFinish:)代理方法中,我们使用JavaScript的document.body.innerHTML属性获取HTML字符串,并将其存储在htmlString变量中。

需要注意的是,由于JavaScript的执行是异步的,因此我们需要在回调中处理结果。另外,由于HTML字符串可能包含特殊字符,例如<>,因此我们需要使用evaluateJavaScript方法来执行JavaScript代码,而不是直接使用stringByEvaluatingJavaScriptFromString方法。

如果您使用的是Objective-C,可以使用以下代码:

代码语言:objective-c
复制
#import <WebKit/WebKit.h>

@interface ViewController () <WKNavigationDelegate>
@property (nonatomic, strong) WKWebView *webView;
@property (nonatomic, strong) NSString *htmlString;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    WKWebViewConfiguration *webConfiguration = [[WKWebViewConfiguration alloc] init];
    self.webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:webConfiguration];
    self.webView.navigationDelegate = self;
    [self.view addSubview:self.webView];

    UILayoutGuide *layoutGuide = self.view.safeAreaLayoutGuide;
    self.webView.translatesAutoresizingMaskIntoConstraints = NO;
    [self.webView.leadingAnchor constraintEqualToAnchor:layoutGuide.leadingAnchor].active = YES;
    [self.webView.trailingAnchor constraintEqualToAnchor:layoutGuide.trailingAnchor].active = YES;
    [self.webView.topAnchor constraintEqualToAnchor:layoutGuide.topAnchor].active = YES;
    [self.webView.bottomAnchor constraintEqualToAnchor:layoutGuide.bottomAnchor].active = YES;

    NSString *htmlContent = @"<html><body><p>Hello, World!</p></body></html>";
    [self.webView loadHTMLString:htmlContent baseURL:nil];
}

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
    [webView evaluateJavaScript:@"document.body.innerHTML" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
        if (result) {
            self.htmlString = result;
            NSLog(@"%@", self.htmlString);
        }
    }];
}

@end

在上面的代码中,我们创建了一个WKWebView实例,并使用loadHTMLString:baseURL:方法加载HTML字符串。在webView:didFinishNavigation:代理方法中,我们使用JavaScript的document.body.innerHTML属性获取HTML字符串,并将其存储在htmlString变量中。

需要注意的是,由于JavaScript的执行是异步的,因此我们需要在回调中处理结果。另外,由于HTML字符串可能包含特殊字符,例如<>,因此我们需要使用evaluateJavaScript:completionHandler:方法来执行JavaScript代码,而不是直接使用stringByEvaluatingJavaScriptFromString方法。

相关搜索:将NSString中的值设置为html webview中的变量如何将HTML in String加载到Flutter中的WebView无法将html字符串中的html加载到webview中jQuery将变量放入包含html字符串的变量中Swift -本地/服务器图像未加载到pdf的HTML字符串中使用IO库将字符串变量作为txt文件加载到s3中,或将其作为txt文件加载到file中Coffeescript将文本文件的内容加载到字符串变量中如何将Html或ts文件中的布尔变量访问到scss中?如何使用iOS Swift将图像数组存储在Firebase存储中的所有路径下如何将结果集变量中的字符串值显示到HTML中?将Javascript或Jquery中的字符串输出(显示)到html中的一行将标记变量转换为Django模板中的HTML类(或div)名称如何在没有angular $compile的情况下将typescript中的对象传递给HTML stringNode Js如何在不将文件写入系统或不在目录中创建文件的情况下将文件下载到内存中为什么将模块加载到局部变量或全局变量会导致不同的结果,这取决于Lua中的模块?如何将角度环境变量传递到在head部分加载到index.html中的javascript脚本将字符串转换或取消格式化为Python中的变量(如format(),但反之)文本字段、按钮或其他元素用户交互在iOS应用程序中HTML字符串的WKWebView中不起作用在不删除其他字符串的情况下,将字符串变量替换为R中的标点符号在给定的字符串没有标签或标识符的情况下,使用python搜索HTML中的特定字符串格式
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Swift 基本语法05-String

一个iOS开发初级菜鸡.png Swift 基本语法01-Swift简介 Swift 基本语法02-"let"和"var" Swift 基本语法03-"if let"和"guard let" Swift...字符串简介 1> String是一个结构体,性能更高 String目前具有了绝大多数NSString功能 String支持直接遍历 2> NSString是一个OC对象,性能略差 2....带可选项字符串拼接 let name = "王红庆" let age = 18 let title: String?...取字符串子串 1> 建议用NSString作为中转,因为Swift取子串方法一直在优化 let str = "王红庆大帅逼" let ocStr = str as NSString let string...".endIndex) print(string) // 输出:庆大帅逼 3> swift里取希望得到字符串(暂时不推荐,还是转成OC字符串易懂一些) let str = "王红庆大帅逼

93490

UI篇- UIWebView使用大全

,不做深究 WKWebView是iOS8推出,算是UIWebVeiw升级版。...,这个协议包含一个必须实现方法,这个方法是提高App与web端交互关键,它可以直接接收到JS脚本转为OCSwift对象--网上大神说,我没用过。)...JS方法 与UIWebView进行交互,调用web页面需要传参函数时,参数需要带单引号,或者双引号(双引号需要进行转义在转义字符前加\),在传递json字符串时不需要加单引号双引号: -(void...13.文件下载到本地址然后再用webView打开: NSString *resourceDocPath = [[NSString alloc] initWithString:[[[[NSBundle...UIWebView在 iOS11使用。 ? UIWebView 在iOS 11上 当顶部 y值设为 0 时,是依然无法盖住UIStatusBar区域,但是滚动时就会出现问题了。

2K10
  • 超实用ios面试技巧,90%的人都不知道……

    iOS开发本身就属于移动开发,所以它依旧是目前热门行业,今天小编就跟大家聊聊iOS面试必考几大知识点。 ? 1 Objective-C ●你是否接触过OC反射机制?...简单聊一概念和使用 Class反射 通过类名字符串形式实例化对象 Class class NSClassFromString@(@”student”); Student *stu = [[class...alloc ]init]; 类名变为字符串 Class class =[Student class]; NSString*className = NSStringFromClass(class);...withObject:@”Mike”]; 方法变成字符串 NSString FomrSelector(@selector*(setName:)) ●编写一个函数,实现递归删除指定路径所有文件 +...Swift还引入了可选项类型(Optionals),用于处理变量值不存在情况。可选项意思有两种,一种变量是存在,例如等于X,而是变量值根本不存在。

    80970

    Swift使用Embassy库进行数据采集:热点新闻自动生成器

    本文介绍如何使用Swift语言和Embassy库编写一个简单爬虫程序,该程序可以从新闻网站上采集热点信息,并生成一个简单新闻摘要。...正文Swift语言和Embassy库Swift是一种现代、高性能、安全、表达力强编程语言,主要用于开发iOS、macOS、watchOS和tvOS等平台应用。...Embassy是一个基于Swift NIO网络库,可以让开发者轻松地创建异步网络应用。Embassy提供了一个事件循环,可以在单线程处理多个网络请求和响应。...// 使用自然语言处理其他方法根据新闻内容生成一个简单新闻摘要 // 这里只是一个示例,实际生成方法可能需要更复杂逻辑 // 这里使用了一个简单规则:取出新闻内容前三句话作为新闻摘要...= error { print(error) } else { // 数据转换为字符串

    21420

    Swift 字符串和字符

    Swift String 和 Character 类型提供了一个快速,兼容 Unicode 方式来处理代码文本信息。 字符串连接操作只需要简单地通过 + 号两个字符串相连即可。...与 Swift 其他值一样,能否更改字符串值,取决于其被定义为常量还是变量Swift String 类型与 OC Foundation NSString 类进行了无缝桥接。...在 OC 和 Cocoa ,通过选择两个不同类 ( NSString 和NSMutableString )来指定该字符串是否可以被修改,Swift 字符串是否可以修改仅通过定义变量还是常量来决定...和 OC NSString 不同,在 OC 创建了一个 NSString 实例,并将其传递给一个函数/方法,或者赋给一个变量,永远都是传递赋值同一个NSString 实例一个引用。...在实际编译时,Swift 编译器会优化字符串使用,使实际复制只发生在绝对必要情况,这意味着你始终可以字符串作为值类型同时获得极高性能。 5.

    78710

    窥探Swift字符串String

    SwiftString和Objective-C语言中NSString还是区别不小SwiftString又回归了正常状态,使用起来更为方便快捷。...本篇博客主题就是Swift字符串类型StringStringSwift让人省心了不少。今天这篇博客就好好认识一SwiftString。   ...如果字符串A值赋给字符串B,那么A和B内存地址是不同,也就是字符串A和字符串B有各自内存空间。...,每个变量都有自己存储地址,也就是对应着OC深拷贝。   ...那么就使用as关键字来转换一类型吧,就是把String类型通过as操作,转换成NSString类型,然后在调用NSString相应方法(比如要获取一个字符串指定范围内字符串时,使用NSString

    1.3K60

    ·FMDB:第三方本地数据库处理框架(官方文档翻译篇)

    2.空字符串(@"")。表示会在临时目录创建一个空数据库,当FMDatabase 链接关闭时,文件也被删除。 3.NULL. 创建一个内在数据库。...: [NSNull null]语法,如果插入字符串comment不是nil,而是插入[NSNull null]如果它是nil。...在Swift,您将使用它executeUpdate(values:),这不仅仅是一个简洁Swift语法,而且也是throws错误处理正确错误: do { let identifier =...一个Swift字符串插入也不应该值插入到SQL。使用?占位符值插入到数据库WHERE在SELECT语句中子句中使用)。...除此之外修饰符可能导致无法预知结果。 一些情况,你如果要在SQL语句中使用 % 字符,你应该使用%%。 2.

    1.3K20

    Object-C黑魔法

    1.NS_ASSUME_NONNULL_BEGIN && NS_ASSUME_NONNULL_END 在Swift存在Option类型,也就是使用?和!声明变量。...而在方法声明,我们还可以使用不带下划线nullable和nonnull,如下所示: - (nullable id)itemWithName:(NSString * nonnull)name 在属性声明...老代码在需要和swift混编时,在新swift编译器会给出一个警告。 nonnull不会影响性能。事实上,我们仍然可以在运行时去判断我们对象是否为nil。...事实上,我们可以nonnull/nullable与我们断言和异常一起看待,其需要处理问题都是同一个:违反约定是一个程序员错误。...变量 比#define更加高效 .但是UIKIT_EXTERN是根据是否是C语言宏定义,根据语言区分 ,比extern更加高效 例子 UIKIT_EXTERN NSString *const

    1.3K10

    窥探Swift之别样枚举类型

    Swift枚举怎不然,Swift枚举功能要强大多,不仅可以给枚举元素绑定值,而且可以给枚举元素关联多个值,同时还可以通过元素值给一个枚举变量赋一个枚举值,并且枚举可以定义枚举函数。...下面将要开始窥探一Swift枚举。   ...rawValue println(cityName) //输出:北京 }     找一个枚举成员不包含字符串用来给枚举变量赋值,观察一结果,下面的testCity值打印出来为nil,...从字面意思上看是给枚举成员关联一个值,没错,就是在给枚举变量赋值时,给枚举变量关联一个值。在Swift如何做呢?...下面的代码是给iOS指定了两个String类型关联值,在给枚举变量赋值时候关联两个值。关联这两个值可以在Switch语句中进行使用。

    99970

    OC底层探索26-App启动时间优化OC底层探索26-App启动时间优化

    通过添加环境变量可以打印出APP启动时间分析(Edit Scheme -> Run -> Arguments) ? 真机测试结果: ?...可执行文件Mach-O->显示包内容->Frameworks可以查看项目中使用到动态库。 因为项目是swift项目,所以有一些swift系统库。不过61个库还是吓自己一跳。...思路:获取启动时符号调用顺序和查看Mach-O符号加载到虚拟页表顺序(link map)进行排列。...4.1 查看pageFault 缺页异常(pageFault):读取到没有加载到物理内存中一页时触发;多次pageFault也会造成启动时间加长; iOS每一页是16K大小,但是16K,可能真正在启动时刻需要用到...注:这是热启动结果. 4.2 查看Mach-O符号加载到虚拟页表顺序(link map) Linkmap是iOS编译过程中间产物,记录了二进制文件布局. ? 查看包内容: ? ?

    84230

    Swift基础 字符串和字符

    字符串创建和操作语法轻巧且可读,字符串文字语法与C相似。字符串串联就像两个字符串与+运算符组合在一起一样简单,字符串可变性通过在常量变量之间进行选择来管理,就像Swift任何其他值一样。...有关String与Foundation和Cocoa一起使用更多信息,请参阅StringNSString之间桥接。 弦文学 您可以在代码包含预定义String值作为字符串文字。...字符串是值类型 SwiftString类型是一种值类型。如果您创建新String值,则该String值在传递给函数方法时,分配给常量变量时将被复制。...在幕后,Swift编译器优化了字符串使用,因此只有在绝对必要情况才能进行实际复制。这意味着在字符串作为值类型使用时,您总是会获得出色性能。...字符串插值 字符串插值是一种通过常量、变量、文字和表达式值包含在字符串文字来构建新String方法。您可以在单行和多行字符串文字中使用字符串插值。

    17000

    JSONEncoder 基础类型编码失败解决方法

    JSONEncoder 在 Swift 还是非常常用,最近项目中有需要将APP数据转换为JSON格式之后,再发送给服务器需求,测试过程,然后报了如下错误: invalidValue(Optional...open func encode(_ value: T) throws -> Data where T : Encodable } 在 Swift JSONEncoder 源码也翻了翻,也是没找到关于...NSString 和 NSNumber(这里只关注基础类型,其他可以自行查看源码) 所以才有了encode 判断 NSNumber 和 NSString 然后抛出异常。。。...有人找到望同步一 最终,为了代码能够正常运行,改了一扩展方法, 经过测试,已经可以表现正常,因为不知道具体生效版本(万一是12.x呢),所以判断写在了抛出异常地方,否则可以写在encode之前:.../// 从源码也找不到具体是从哪个版本才支持对 Int Double String 等基本类型支持 if (self is NSNumber) || (self is NSString

    80110

    iOS - DeviceToken 解析

    一直以来使用解析方式(iOS13之前)都是如下: Objective-C: NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet...let tokenNew = dataStr.description.removeAll(where: charactersToRemove.contains) 或者类似的解析方式,都是替换和空字符串这种方法...在stackoverflow中有人说过这样解析方式并不好,但是一直没有问题,所以大家也就习惯了这样解析方式了,但是iOS13这样解析方式就有问题了 大家可以更新解析方式为下面这样方式(兼容各个版本...count; i++) { [valueString appendFormat:@"%02x", tokenBytes[i]&0x000000FF]; } //这个也可改成for in 循环获取 Swift...:和上面方法基本一致,使用高级函数一行搞定 let token = deviceToken.map{String(format: "%02.2hhx", $0)}.joined() let token

    2.3K20

    腾讯云V3签名方法之iOS

    首次接触,建议使用 API Explorer “签名串生成”功能,选择签名版本为“API 3.0 签名 v3”,可以生成签名过程进行验证,也可直接生成 SDK 代码。...目前提供7 种常见编程语言SDK,封装了签名和请求过程,均已开源 有一些需求移动端直接请求接口,这时候就需要我们自己写签名了,安卓可以直接复制JAVA代码,iOS方面官方文档目前没有OC示例,也没有Swift...示例 Swift示例见:https://cloud.tencent.com/developer/article/1602241 接下来我们按照腾讯云文档一个签名过程来实现OC签名 https://...= @"TC3-HMAC-SHA256"; NSString *timestamp = @"1551113065"; //此处用官方文档时间戳 NSString *date = [...,说明签名准确无误 计算签名方法调用到其他方法如下: //SHA256加密 -(NSString*)sha256HashFor:(NSString*)input{ const char*

    3.3K110

    Android开发快速入门iOS开发(概览)

    Xcode object-c(swift) Cocoapods Controller AppDelegate 2 工具篇 iOS开发工具 Xcode可直接在线获取并安装,如果仅是简单开发一个HelloWorld...`,'4.0.1' # 指定依赖第三方库,大于某个版本 pod '***', '~> 1.8.4.0' 3 语言篇 iOS开发一般使用oc swift来开发,需要注意iOS没有Android里包概念...,类名字必须保持全局唯一,一般约定是添加特定前缀(公司 + 项目)如WXGPUImage 下面会以oc为例来说明 3.1 基础语法 头文件(*.h)里定义方法和变量都是公共,源文件(*.m)文件里定义方法与变量是私有的...xxx alloc]init]; //推荐使用 对象可变性:object-c 里对象可变(类似于Java 里final)和不可变时使用时使用类是不一样,以String为例子: NSString :...,会被置为nil; strong,对新对象进行强引用,释放旧对象,其引用计数+1,用在ARC,用于对象指针类型数据类型 retain 对新对象进行强引用,释放旧对象,其引用计数+1,用在MRC

    1K20

    iOS字符串本地化(APP 内本地化切换) 、nib本地化、图片本地化

    3.1 APP 内本地化切换 iOS APP 内本地化切换【修订】 3.2 一个语言对应多个字符串资源文件方案 3.3 iOS本地化字符串指定参数顺序(应用:app内多语言切换) iOS...本地化字符串指定参数顺序(应用场景:app内多语言切换)【修订】 前言 使用本地化功能,可以轻松地应用程序翻译成多种语言,甚至可以翻译成同一语言多种方言 如果要添加本地化功能,需要为每种支持语言创建一个子目录...预先准备好图片替换对应语言图片即可 例如替换中文 zh-Hans.lproj文件夹home.png 在代码照常使用图片即可 [UIImage imageNamed:@"icon_hyxq_youhuiq..."]; III、字符串本地化 应用场景: iOS APP 内国际化切换 (对话框文字)、 应用名称本地化 3.1 APP 内本地化切换 【iOS APP 内国际化切换】1、字符串本地化...(采用) 2、通过发通知,到各个控制器更新文字(不采用) 3.2 一个语言对应多个字符串资源文件方案 应用场景:解决部分英文国际化没有生效问题 存储国际化英文字符串.string文件长度受限,

    1.6K30
    领券