Swift中与WebView的交互

在Swift中,可以使用WKWebView来实现与WebView的交互。WKWebView是iOS 8及以后版本中新增的Web视图控件,它提供了一种现代化的方式来加载和显示Web内容,并且支持与JavaScript的交互。

以下是一些常见的与WebView的交互方式:

1.加载URL:可以使用WKWebView的load(_ request: URLRequest)方法来加载一个URL。例如:

let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 320, height: 480))
if let url = URL(string: "https://www.example.com") {let request = URLRequest(url: url)webView.load(request)
}

2.在WebView中执行JavaScript代码:可以使用WKWebView的evaluateJavaScript(_ javaScriptString: String, completionHandler: ((Any?, Error?) -> Void)?)方法来执行JavaScript代码,并且可以通过completionHandler获取执行结果。例如:

let javaScript = "alert('Hello, world!');"
webView.evaluateJavaScript(javaScript) { (result, error) inif let error = error {print("JavaScript evaluation error: \(error.localizedDescription)")} else {print("JavaScript execution result: \(result)")}
}

3.通过WKScriptMessageHandler与JavaScript进行交互:可以通过实现WKScriptMessageHandler协议来监听WebView中的JavaScript事件,并通过WKUserContentController的add(_ scriptMessageHandler: WKScriptMessageHandler, name: String)方法来注册消息处理器。例如:

class MessageHandler: NSObject, WKScriptMessageHandler {func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {if message.name == "myMessage" {if let body = message.body as? [String: Any] {// 处理消息}}}
}let messageHandler = MessageHandler()
webView.configuration.userContentController.add(messageHandler, name: "myMessage")

在JavaScript中,可以使用window.webkit.messageHandlers.myMessage.postMessage(body)来向Swift发送消息。其中,myMessage是注册的消息名称,body是要发送的消息内容。

以上是一些常见的与WebView的交互方式,你可以根据具体需求选择适合的方式来实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/2453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手撕netty源码(一)- NioEventLoopGroup

文章目录 前言一、NIO 与 netty二、NioEventLoopGroup 对象的创建过程2.1 创建流程图 前言 本文是手撕netty源码系列的开篇文章,会先介绍一下netty对NIO关键代码的封装位置,主要介绍 NioEventLoopGroup 对象的创建过程,看看new一个对象可以做…

【国产替代】航空电子通信总线航空电子通信总线产品为MIL-STD-1553和ARINC 429等协议提供原生支持

航空电子通信总线 航空电子通信总线产品为MIL-STD-1553和ARINC 429等协议提供原生支持。这些产品用于进行航空电子应用所需的开发、生产和系统测试。 PXIe,2通道PXI ARINC-664接口模块 AIM ARINC-664具有板载处理器,可自动处理所有与协议相关的活动&…

界面组件DevExpress Blazor UI v23.2 - 支持.NET 8、全新的项目模版

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验,这个UI自建库提供了一套全面的原生Blazor UI组件(包括Pivot Grid、调度程序、图表、数据编辑器和报表等)。 DevExpress Blazor控件目前已经升级…

(五)AB测试及两个案例 学习简要笔记 #统计学 #CDA学习打卡

目录 一. AB测试简介 1)假设检验的一般步骤 2)基于假设检验的AB测试步骤 二. 案例1:使用基于均值的假设检验进行AB测试 1)原始数据 2)提出原假设H0和备择假设H1 3)使用均值之差的t检验,计…

leetcode929-Unique Email Addresses

题目 每个 有效电子邮件地址 都由一个 本地名 和一个 域名 组成,以 ‘’ 符号分隔。除小写字母之外,电子邮件地址还可以含有一个或多个 ‘.’ 或 ‘’ 。 例如,在 aliceleetcode.com中, alice 是 本地名 ,而 leetcode…

AI视频改字个性化祝福豪车装X系统uniapp前端开源源码下载

装X系统源码简介 创意无限!AI视频改字祝福,豪车装X系统源码开源,打造个性化祝福视频不再难! 想要为你的朋友或家人送上一份特别的祝福,让他们感受到你的真诚与关怀吗?现在, 通过开源的AI视频…

【深度学习】yolo-World,数据标注,zeroshot,目标检测

仓库:https://github.com/AILab-CVC/YOLO-World 下载权重: 仓库下载和环境设置 下载仓库:使用以下命令从 GitHub 上克隆仓库: git clone --recursive https://github.com/AILab-CVC/YOLO-World.git创建并激活环境&#xff1a…

scipy csr_matrix: understand indptr

See https://stackoverflow.com/questions/52299420/scipy-csr-matrix-understand-indptr

架构师核心-云计算云上实战(云计算基础、云服务器ECS、云设施实战、云上高并发Web架构)

文章目录 云计算基础1. 概念1. 云平台优势2. 公有云3. 私有云4. IaaS、PaaS、SaaS 2. 云设施1. 概览2. 核心组件 云服务器ECS1. ECS介绍1. 简介2. 组件3. 概念4. 图解5. 规格6. 场景 2. ECS服务器开通1. 开通服务器2. 连接服务器 3. 云部署准备1. 1Panel介绍2. 安装1Panel3.安全…

Qt tcp通信(客户端+服务器一对一)

学习自《Qt5.9 C开发指南》 服务器端: QTcpServer *tcpServer; //TCP服务器 tcpServernew QTcpServer(this); connect(tcpServer,SIGNAL(newConnection()),this,SLOT(onNewConnection())); 当有新的客户端接入时,QTcpServer内部的incomingConnectio…

Rust:遍历 BinaryHeap

Rust 的 BinaryHeap 结构体实现了迭代器接口,因此你可以遍历它。不过,由于 BinaryHeap 是一个优先队列,它默认是按照元素的优先级顺序(对于 MinBinaryHeap 是最小到最大,对于 MaxBinaryHeap 是最大到最小)来…

梯度,hesse阵与Jacobi矩阵

分清楚三个量的含义和计算方法。 梯度 表征的是一个列向量,是相对于某个方向而言的,但是某个方向上可能有多个变量,所以梯度不是简单的直接求偏导,并且说了,它是一个列向量,所以, 我们设 f : …

ArcGIS Pro 和 Python — 分析全球主要城市中心的土地覆盖变化科林

第一步——设置工作环境 1–0. 地理数据库 在下载任何数据之前,我将创建几个地理数据库,在其中保存和存储所有数据以及我将创建的后续图层。将为我要分析的五个城市中的每一个创建一个地理数据库,并将其命名为: “Phoenix.gdb” “Singapore.gdb” “Berlin.gdb” “B…

[论文笔记] EcomGPT:COT扩充数据的电商大模型

社区供稿 | EcomGPT:基于任务链数据的电商大模型(附魔搭推理实践) - 知乎 https://arxiv.org/pdf/2312.15696.pdf EcomInstruct指令数据集构建 数据集组成 COT方式构造垂域训练数据:把原本的垂域任务分解成了原子任务,构造了基于解决原子任务的数据。这样能用类似…

ThingsBoard教程(二十九):详细讲解在tb平台下 http协议下的客户端rpc,服务的rpc的使用

客户端rpc 先来说一下简单的客户端rpc, 客户端发起rpc请求,只需要使用post方法调用该接口即可以 http://host:port/api/v1/$ACCESS_TOKEN/rpc请求路径中间的参数 ACCESS_TOKEN 必须是设备的访问令牌。 请求携带的参数如下,二个参数method和params {"method": …

PHP 与 MySQL 数据库集成教程

当涉及到PHP与MySQL数据库的集成时,你需要执行几个步骤来设置连接并执行查询。下面是一个简单的PHP与MySQL集成教程,包括一段示例代码: 步骤 1:安装和配置MySQL数据库 首先,确保你已经安装了MySQL数据库,…

PyCharm开发工具安装plugins插件

一. 简介 通过前面的学习,我们知道 python开发常用的一个开发工具(即IDE)是 PyCharm。 本文来简单介绍一下,PyCharm开发工具是如何安装 plugins插件的。其实与 vscode软件安装插件类似。 本文来学习 PyCharm开发工具安装一个中…

深入浅出MySQL-02-【MySQL支持的数据类型】

前言 环境: Windows11MySQL-8.0.35 1.数值类型 MySQL中的数值类型,如下: 整数类型字节最小值最大值TINYINT1有符号 -128无符号 0有符号 127无符号 255SMALLINT2有符号 -32768无符号 0有符号 32767无符号 65535MEDIUMINT3有符号 -8388608…

table表格导出为excel文件并设置样式

table表格导出为excel文件并设置样式 安装xlsx、xlsx-style-medalsoft 的 npm 包: npm i xlsx xlsx-style-medalsoft设置全局: Vue.prototype.$XLSX XLSX; // 设置全局 Vue.prototype.$XLSXStyle XLSXStyle; // 设置全局具体代码实现: …

WordPress缓存插件有哪些?好用的缓存插件分享

目前WordPress缓存插件有:WP Rocket、WP Super Cache、W3 Total Cache、Sucuri、NitroPack、SiteGround Optimizer、LiteSpeed Cache、WP-Optimize、Hummingbird、Cache Enabler、Comet Cache。 在当今的数字世界中,拥有一个高效的网站对于吸引和留住用…