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

如何使用WKScriptMessageHandler读取发送给父元素的sent消息?

WKScriptMessageHandler是一个协议,用于在WKWebView中处理JavaScript发送的消息。它允许JavaScript代码通过window.webkit.messageHandlers对象将消息发送给原生代码,并由WKScriptMessageHandler协议的实现来接收和处理这些消息。

要使用WKScriptMessageHandler读取发送给父元素的sent消息,需要按照以下步骤进行操作:

  1. 首先,创建一个遵循WKScriptMessageHandler协议的类,并实现其唯一的方法userContentController(_:didReceive:)。这个方法会在接收到JavaScript消息时被调用。
代码语言:txt
复制
class MessageHandler: NSObject, WKScriptMessageHandler {
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        // 在这里处理接收到的消息
    }
}
  1. 在创建WKWebView时,将上述的MessageHandler对象作为配置的userContentController的代理。
代码语言:txt
复制
let configuration = WKWebViewConfiguration()
let userContentController = WKUserContentController()
let messageHandler = MessageHandler()
userContentController.add(messageHandler, name: "sent")
configuration.userContentController = userContentController

let webView = WKWebView(frame: .zero, configuration: configuration)
  1. 在JavaScript代码中,通过window.webkit.messageHandlers对象发送消息给原生代码。这里的"name"参数需要与上述代码中的add(_:name:)方法中的name参数保持一致。
代码语言:txt
复制
window.webkit.messageHandlers.sent.postMessage("Hello from JavaScript!")
  1. 在MessageHandler类的userContentController(_:didReceive:)方法中,可以通过message.body获取到JavaScript发送的消息内容。
代码语言:txt
复制
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    if message.name == "sent" {
        let messageBody = message.body as? String
        print("Received message from JavaScript: \(messageBody ?? "")")
    }
}

通过上述步骤,就可以使用WKScriptMessageHandler读取发送给父元素的sent消息。在实际应用中,可以根据具体需求进行消息的处理和相应的业务逻辑操作。

腾讯云相关产品和产品介绍链接地址:

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

相关·内容

Linux 下进程间通信:使用管道和消息队列

尽管这个程序只有一个单一源文件,在它正确执行情况下将会发生多进程情况。 下面的内容是对库函数 fork 如何工作一个简要回顾: fork 函数由进程调用,在失败时返回 -1 给进程。...(数组元素 pipeFDs[0] 是读端文件描述符,元素 pipeFDs[1] 是写端文件描述符。)...在这个例子中,进程负责写入,而子进程负责读取,尽管这样角色分配可以反过来。...子进程可以执行任意代码,而它们可能与进程完全没有关系。但是,假如当子进程终止时,系统将会通过一个信号来通知进程。 要是进程在子进程之前终止又该如何呢?...在 pipeUN 程序中使用了第二种方法,其中进程代码使用是下面的调用: wait(NULL); /* called in parent */ 这个对 wait 调用意味着一直等待直到任意一个子进程终止发生

1.2K20

Linux进程间通信之管道

进程间通信目的: 数据传输: 一个进程需要将它数据发送给另一个进程。 资源共享: 多个进程之间共享同样资源。...pipe函数: int pipe(int pipefd[2]);  pipe函数参数是一个输出型参数,数组pipefd中两个元素分别用来返回管道读端和写端文件描述符: 数组元素 含义 pipefd...[0] 管道读端文件描述符 pipefd[1] 管道写端文件描述符  匿名管道使用: 注意下图中fd均指pipefd。...我们再站在文件描述符角度深入理解: 匿名管道测试:  现在用下述代码测试匿名管道,进程进行一直读取,子进程进行一直写入: #include #include ...close(pipefd[1]);//任务完成关闭写端 exit(0); } //进程 std::cout<<"进程关闭不需要fd了,准备读消息了"<<std

9210
  • 面经总结——腾讯面试题汇总(一)

    i++其实一共做了三次指令操作,第一次,从内存中读取i变量值到CPU寄存器,第二次在寄存器中i自增1,第三次将寄存器中值写入内存。...(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。...7.如何用到TCP、UDP协议?...因此,主要作为进程间以及同一进程内不同线程之间同步手段。 消息队列(message queue):消息队列是由消息链表,存放在内核中并由消息队列标识符标识。...fork函数详讲 fork函数特点概括起来就是“调用一次,返回两次”,在进程中调用一次,在进程和子进程中各返回一次。 fork另一个特性是所有由进程打开描述符都被复制到子进程中。

    1.5K30

    构建一个即时消息应用

    对于实时消息,我们将使用 服务器发送事件(Server-Sent Events)。这是一个打开连接,我们可以在其中传输数据流。我们会有个端点,用户会在其中订阅发送给所有消息。...我们创建一个消息通道,用它来构建一个客户端,并将其存储在客户端映射中。每当创建新消息时,它都会进入这个通道,因此我们可以通过 for-select 循环从中读取。...服务器发送事件(Server-Sent Events)使用以下格式发送数据: data: some data here\n\n 我们以 JSON 格式发送: data: {"foo":"bar"}\n\...这个循环会一直运行,直到使用请求上下文关闭连接为止。我们延迟了通道关闭和客户端删除,因此,当循环结束时,通道将被关闭,客户端不会收到更多消息。...这就是为什么 guard() 中间件也会从 URL 查询字符串中读取令牌原因。 ---- 实时消息部分到此结束。我想说是,这就是后端全部内容。

    47820

    WKWebView详解

    :(NSURL *)readAccessURL; URL是文件URL readAccessURL是允许读取URL,如果是文件夹,则文见夹下所有文件都可以被读取 --- 放缩网页内容 是否允许放大手势来放大网页内容...WKUserContentController WKUserContentController对象提供了一种向WebView发送JavaScript消息或者注入JavaScript脚本方法 添加WKScriptMessageHandler...name:(NSString *)name; 添加一个名称为nameWKScriptMessageHandler将会导致在所有使用WKScriptMessageHandlerWebView所有...@property(nonatomic, readonly, copy) WKFrameInfo *frameInfo; 发送消息WKScriptMessageHandler名字 @property...previewActions是元素使用默认操作选项(预览时上拉可见),比如打开链接,添加到阅读列表,拷贝链接,共享。

    20.6K193

    iOS理论基础(二)

    @protocol 和 category 中如何使用 @property 在 protocol 中使用 property 只会生成 setter 和 getter 方法声明,我们使用属性目的,是希望遵守我协议对象能实现该属性...但是:集合对象内容复制仅限于对象本身,对象元素仍然是指针复制。 9. @synthesize合成实例变量规则是什么?...在 Objective-C 中向 nil 发送消息是完全有效——只是在运行时不会有任何作用: 如果一个方法返回值是一个对象,那么发送给nil消息将返回0(nil)。...如果方法返回值为结构体,发送给 nil 消息将返回0。结构体中各个字段值将都是0。 2. 如果方法返回值不是上述提到几种情况,那么发送给 nil 消息返回值将是未定义。...unrecognized selector sent to XXX 。

    42510

    进程间通信 IPC 完全指南:各种机制原理与实战

    本指南旨在深入探讨进程间通信各种机制,从基础知识到实战应用,帮助读者全面理解IPC工作原理,并掌握如何在不同场景下选择和应用最合适IPC方法。...管道(Pipe)可能是本地使用最广泛 IPC 方法之一。管道(Pipe)实际上是使用一段内核内存实现。系统调用始终创建一个管道和两个关联文件说明,用于从管道读取和写入管道。...例如,进程创建管道,并在fork()之后将管道读写文件描述符分别传递给子进程和进程。子进程可以将数据写入管道,进程则从管道中读取数据。...许多任务可以将消息写入队列,但一次只能有一个任务从队列中读取消息读取器在消息队列上等待,直到有消息要处理。消息可以是任意大小。...SIGCHLD (17): 子进程状态发生变化通知信号,通常由子进程退出或终止时发送给进程。

    1.2K20

    Solidity 文档--第一章:智能合约入门

    如果你使用在线solidity环境 来尝试这个例子。调用函数时,将无法改变from地址。所以你只能扮演铸币者角色,可以铸造货币并发送给其他人,而无法扮演其他人角色。...为了监听这个事件,你可以使用如下代码: Coin.Sent().watch({}, '', function(error, result) { if (!...就像你如果仅仅是为了使用亚马逊AWS,并不需要了解其内部工作原理。 交易/事务 区块链是一个全局共享,事务性数据库。这意味着参与这个网络每一个人都可以读取其中记录。...事实上每个交易都可以被认为是一个顶层消息调用,这个消息调用会依次产生更多消息调用。 一个合约可以决定剩余gas分配。比如内部消息调用时使用多少gas,或者期望保留多少gas。...调用层数被限制为1024,因此对于更加复杂操作,我们应该使用循环而不是递归。 代码调用和库 存在一种特殊类型消息调用,被称为callcode。

    82850

    Storm 理解内部消息缓冲机制

    优化 Storm 拓扑性能有助于我们理解 Storm 内部消息队列配置和使用,在这篇文章中,我将向大家解释并说明在 Storm(0.8或0.9)版本中工作进程以及相关联 Executor 线程是如何完成内部通信...同样地,每个工作进程都有一个发送线程,负责从工作进程传输队列中读取消息,并通过网络将消息发送给下游消费者。...接收线程用于将网络中输入消息发送到 Executor 线程输入队列中,发送线程用于将传输队列消息发送给下游消费者。...topology.receiver.buffer.size 是一次批处理最大消息数,工作进程接收线程从网络读取消息发送到 Executor 输入队列中。...同样地,每个 Executor 都有一个专用发送线程,将 Executor 输出消息从其输出队列发送到“”工作进程传输队列。

    84020

    MFC Windows 程序设计->消息反射

    1、增加反射消息映射入口。   2、增加对应消息处理函数。   注意:可以使用MFCClassWizard作上述动作,在ClassWizard中,可处理反射消息以一个"="号以示区别。...它仅出现在MFC中;它用意是方便控制子窗口重用;对某些通知消息你可以重载对应虚函数(WM_DRAWITEM...)进行处理;对其它你可以使用标准消息反射映射进行处理。...消息反射由来   在windows和MFC4.0版本一下,窗口(通常是一个对话框)会对这些消息进行处理,换句话说,子控件这些消息处理必须在窗口类体内,每当我们添加子控件时候,就要在窗口类中复制这些代码...我们可以想象,如果这些消息都让窗口类去做,窗口就成了一个万能神,一个臃肿不堪代码机,无论如何消息处理都集中在窗口类中,会使窗口繁重无比,但是子控件却无事可做,并且代码也无法重用,这对于一个程序员来讲是多么痛苦一件事...消息处理过程   (1)子窗口向窗口发送通知消息,激发窗口去调用它虚函数CWnd::OnNotify。

    5910

    干货 | 长连接websocketSSE等主流服务器推送技术比较

    后端输出内容: 当有新消息时服务端会向iframe中输入一段js代码.:println("级函数('" + 数据 +"')”);用于调用级函数传数据。...1.5 Server-sent Events(sse): sse与长轮询机制类似,区别是每个连接不只发送一个消息。...客户端发送一个请求,服务端保持这个连接直到有新消息发送回客户端,仍然保持着连接,这样连接就可以消息再次发送,由服务器单向发送给客户端。...然后使用onmessage事件来获取消息 ? 服务端可以自定义类型事件,对于这些事件,可以使用addEventListener来获取。 ? 服务端: 内容与普通Controller差不多。...总结 对于简单推送需求又不考虑兼容低版本浏览器,推荐使用server-sent Events。 如果需要多条双向数据实时交互或需要二进制传输,推荐websocket。

    3.3K80

    Android实战 粗略实现一个简单CS结构聊天室功能

    =null){ **//每当读到来自服务器消息之后,响应给U界面** System.out.println("读取到服务器发送给客户端消息="+content); Message msg=newMessage...it=MyServer.SockList.iterator();使用Iterator()要求返回一个Iterator (2)使用next()获取序列中下一个元素 (3)使用hasNext()检查序列中时候还有元素...(4)使用remove()将迭代器返回元素删除 4.多线程使用 5.Handler,MessageQueue,Looper原理 1)Looper:每一个线程只有一个Looper,它负责管理MessageQueue...,会不断从Message中取出消息,并且将消息分给对应Handler处理 2)MessageQueue:由Looper负责管理,它采用先进先出方式来管理Message 3)Handler:它能将消息发送给...缺点:由于继承了Thread,类无法再继承其他类 2)采用implements Runnable** 优点**:没有继承Thread类,所以可以继承其他类,在这种形式下,多个线程可以共享同一个对象

    97450

    RabbitMQ实战2.消息轮询、响应、持久化消息轮询分配消息响应防丢失消息持久化参考资料

    继上篇 RabbitMQ实战1.消息代理 消息轮询分配 如果生产者投递消息需要运行相当长时间,且有多个消费者在处理消息,那么RabbitMQ是怎么分配消息?...[x] Done 由此可见,五条消息被轮流分配到不同消费者 默认来说,RabbitMQ会按顺序把消息发送给每个消费者(consumer)。平均每个消费者都会收到同等数量得消息。...这种发送消息得方式叫做——轮询(round-robin) ? 一对多 消息响应防丢失 在以上代码中,当消息被RabbitMQ发送给消息者后,就从内存中移除了。...如果消费者在发送响应前挂掉了,RabbitMQ会将此消息重新发送给其他消费者。 消息没有超时概念,即使是处理耗时相当长任务也不会有问题。...只有挂掉,RabbitMQ才会重发 消息响应默认是开启,可使用no_ack=True标识把它关闭 将 worker.py no_ack=True 取消 def callback(ch, method

    56230

    干货 | 长连接websocketSSE等主流服务器推送技术比较

    后端输出内容: 当有新消息时服务端会向iframe中输入一段js代码.:println("级函数('" + 数据 +"')”);用于调用级函数传数据。...1.5 Server-sent Events(sse): sse与长轮询机制类似,区别是每个连接不只发送一个消息。...客户端发送一个请求,服务端保持这个连接直到有新消息发送回客户端,仍然保持着连接,这样连接就可以消息再次发送,由服务器单向发送给客户端。 原理: SSE本质是发送不是一次性数据包,而是一个数据流。...然后使用onmessage事件来获取消息 ? 服务端可以自定义类型事件,对于这些事件,可以使用addEventListener来获取。 ? 服务端: 内容与普通Controller差不多。...总结 对于简单推送需求又不考虑兼容低版本浏览器,推荐使用server-sent Events。 如果需要多条双向数据实时交互或需要二进制传输,推荐websocket。

    3.2K30

    高性能网络编程 - 白话TCP 三次握手过程

    网络中传输数据包由两部分组成: 一部分是协议所要用到首部 另一部分是上一层传过来数据。 首部结构由协议具体规范详细定义。在数据包首部,明确标明了协议应该如何读取数据。...一台服务器上不同网络应用程序必须有不同端口号,A 程序启动了使用了端口 x,B 程序启动就不能使用端口 x,否则会报错“Address already in use”。...总的来说,操作系统是通过源 IP 地址、目标 IP 地址、协议号(协议类型)、源端口号以及目标端口号这五个元素唯一性识别一个网络上通信 TCP Finite State Machine (FSM...,客户端进入 SYN_SENT 状态,等待服务器端确认。...接着把第一个 SYN 报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于 SYN-SENT 状态 第二次握手:服务器端收到数据包后由请求报文标志位 SYN=1 知道客户端请求建立连接

    26210

    2020-iOS最新面试题解析—1(原理篇)

    而 super 本质是一个编译器标示符,和 self 是指向同一个消息接受者 * 当使用 self 调用方法时,会从当前类方法列表中开始找,如果没有,就从父类中再找; * 而当使用 super...在Objective-C中向nil发送消息是完全有效——只是在运行时不会有任何作用 如果一个方法返回值是一个对象,那么发送给nil消息将返回0(nil) 如果方法返回值为指针类型,其指针大小为小于或者等于...sizeof(void*) float,double,long double 或者long long整型标量,发送给nil消息将返回0 如果方法返回值为结构体,发送给nil消息将返回0。...结构体中各个字段值将都是0 如果方法返回值不是上述提到几种情况,那么发送给nil消息返回值将是未定义 具体原因分析 * objc是动态语言,每个方法在运行时会被动态转为消息发送,即:objc_msgSend...然后在该类中方法列表以及其父类方法列表中寻找方法运行 * 如果,在最顶层类中依然找不到相应方法时,程序在运行时会挂掉并抛出异常unrecognized selector sent to XXX

    1.7K21

    nginx Access日志格式「建议收藏」

    /logs/access.log, 默认日志格式为combined格式; 使用log_format指令可以自定义日志格式; 语法 log_format name [escape=default|json...$request_length 请求长度(包括请求行,请求头和请求体) $request_time 秒.毫秒;请求处理时长;从客户端读取第1个字节开始(请求),到最后1个字节发送给客户端为止(响应) $.../Aug/2018:09:57:51 +0800″ 发送给客户端变量,会有前辍”sent_http_”,如”$sent_http_content_range” 每个模块有内置变量可用于记录日志 http_core...模块 变量名 说明 $arg_name name为请求行里参数名 $args 请求行里参数 $binary_remote_addr $body_bytes_sent 发送给客户端字节数,不包括响应头大小...$bytes_sent 发送给客户端字节数 $connection 连接序列号 $connection_requests 当前通过连接发出请求数 $content_length 请求头字段”Content-Length

    1.5K10
    领券