首页
学习
活动
专区
工具
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方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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 = "王红庆大帅逼

90990

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区域,但是滚动时就会出现问题了。

1.9K10

超实用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,而是变量值根本不存在。

79170

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

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

19420

Swift 字符串和字符

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

76810

窥探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.2K20

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语句中进行使用。

97470

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编译过程中间产物,记录了二进制文件布局. ? 查看包内容: ? ?

80430

Swift基础 字符串和字符

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

13200

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

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

76510

腾讯云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

95920

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.5K30
领券