当前位置:首页 > 实用技巧 >

webview回调怎么解决

来源:原点资讯(www.yd166.com)时间:2023-07-08 23:27:56作者:YD166手机阅读>>

webview回调怎么解决,(1)

一 背景

熟悉 iOS\macOS Hybrid 混合开发的同学应该都有体会,WKWebView 虽然是苹果作为替代 UIWebView\WebView 而推出的"新"组件,但大部分开发者对它实在“爱不起来”。毕竟对于国内大部分应用开发者来说,在实际使用中 WKWebView 所谓的“优势”未必能体现出来,但带来的“坑”却都着实都不浅。

目前社区或线上可查找的 WKWebView 相关资料,大多比较陈旧且人云亦云、复制粘贴类的居多。少部分真实实践和探索的开发者,或许也因时间或精力的原因,对问题和解决方案未能做详细的阐述。导致目前线上 WKWebView 相关的资料数量不少、但质量不高;且有不少文章存在对问题的背景解释不清,解决方案缺乏有效验证等问题。

我从事端容器领域开发多年,曾在生产环境方案设计上与 WKWebView "对抗"多次。目前混合开发已经是现代 App 标配,一方面是对这么长时间用法经验上的总结,另外一方面也希望能够为还在抗争中的同学提供一些新视角或者解决思路,故准备结合 WebKit 部分源码,将自己对这个组件的理解以及部分问题解决方案整理分享一下。本文尝试说明 3 件事情:

  • WKWebView 使用中的典型问题有哪些
  • 为什么会出现这些问题
  • 这些问题的解决办法有哪些
二 基础回顾

iOS 端网络设计和 WKWebView 设计特点我们可以通过官方资料来查阅。但为了后面更好的说明问题,下面我们重点回顾下与文章后续内容相关的两个基本知识点:

  • iOS 端网络设计与 Cookie 管理
  • WKWebView 多进程模型

1 iOS 网络设计与 Cookie 管理

Cookie 管理是做混合开发过程中经常会涉及到的部分,在应用开发中我们知道可以通过 NSHTTPCookie 和NSHTTPCookieStorage 来管理应用的 Cookie。但在系统层面 Cookie 是如何管理的、如何与网络层各模块进行联动,这对我们后面分析WKWebView 中的 cookie 问题有着至关重要的联系。

根据官方资料,我们可知 iOS 平台下网络相关模块大概关系如下:

webview回调怎么解决,(2)

从上至下模块依次为:

  • WebKit:应用层,客户端 App 以及 WKWebView 处于这一层。
  • NSURL:可以理解为对底层 CF 接口的封装扩展层,NSURLConnection、NSURLSession 等处于这一层。
  • CFNetwork:iOS 网络模块核心实现层,是网络层设计中最重要的部分。负责网络协议组装发送接收等主要工作,与 CoreFoundation 框架关系紧密。
  • BSD socket:基于底层硬件接口的 socket 服务。

CFNetwork 是整个网络系统的核心模块,负责组装请求、处理响应等:

webview回调怎么解决,(3)

核心内容包含:

  • CFURLRequest:包括 URL/header/body 这些请求的信息。CFURLRequest 会进一步转换成 CFHTTPMessage。
  • CFHTTPMessage:主要是 HTTP 协议的定义和转换,把每一个请求 request 转换成标准的 HTTP 格式的文本。
  • CFURLConnection:主要是处理请求任务。包括 pthread 线程、CFRunloop、请求队列的管理等等。提供了start、cancel 等等操作的 API。
  • CFHost:负责 DNS,有 CFHostStartInfoResolution 等函数,基于 dns_async_start 和 getaddrinfo_async_start 等方法。
  • CFURLCache/CFURLCredential/CFHTTPCookie:处理 缓存/证书/cookie 相关的逻辑,都有对应的NS类。

从上面分析可知关键信息:iOS Cookie 管理相关模块处于 CFNetwork 这一层中。即对于请求 Response 中的 "set-cookie" 字段,在 CFNetwork 中被消费和处理。

2 WKWebView 多进程模型

通过官方资料,我们知道 WKWebView 相比 UIWebView 很大的一个变化是"多进程模型":

WKWebView 在运行时,核心模块运行在独立进程中,与 App 进程独立。

WKWebView 使各种问题的原因,有不少和多进程运行模式有很大的关系。

多进程模型详解

但具体是什么样形态的多进程?我们通过一张简图来说明下:

webview回调怎么解决,(4)

首页 1234下一页

栏目热文

webview无法更新(webview安装不了)

webview无法更新(webview安装不了)

作为一个博客站长,手机上的浏览需求是一定会有的,最起码的博客网站的调试必须要有“手机端”这个环节的,所以手机端的浏览器大...

2023-07-08 23:19:37查看全文 >>

webview打开方式(多进程webview打开好吗)

webview打开方式(多进程webview打开好吗)

开发小程序绕不开 webview,什么是 webview?有什么作用呢?一、什么是 webviewWebView 也叫网...

2023-07-08 23:33:41查看全文 >>

webview不兼容怎么办

webview不兼容怎么办

WebView2控件应用详解系列博客 长青版WebView2运行时将作为Windows 11操作系统的一部分包含在内。但...

2023-07-08 23:03:55查看全文 >>

webview怎么找(webview地址怎么设置)

webview怎么找(webview地址怎么设置)

默认我们用Android SDK下包含的UiautomatorViewer.bat 工具查看app页面控件时只能查看原生...

2023-07-08 23:02:55查看全文 >>

webview安装了怎么运行(webview入门教程)

webview安装了怎么运行(webview入门教程)

本文内容步骤 1 - 安装 Visual Studio 和 Windows 应用 SDK步骤 2 - 安装 Micros...

2023-07-08 23:03:08查看全文 >>

webview停止运行怎么办(android system webview已停止)

webview停止运行怎么办(android system webview已停止)

近日,许多用户在网上抱怨其 Android 应用出现了难以避免的崩溃问题。谷歌在调查后发现,问题与系统中的 WebVie...

2023-07-08 23:18:57查看全文 >>

关于惊蛰吃梨的语句

关于惊蛰吃梨的语句

春风送暖,春雷乍响,二十四节气中第三个节气惊蛰到了。惊蛰节气在农耕上有着相当重要的意义,古代以农为本,而惊蛰又标志着春耕...

2023-07-08 22:56:56查看全文 >>

惊蛰吃梨的典故图片(惊蛰吃梨是哪里的习俗)

惊蛰吃梨的典故图片(惊蛰吃梨是哪里的习俗)

惊蛰是中国传统二十四节气中的一个节气,每年公历3月5日或6日交节。惊蛰是一个具有特殊意义的节气,标志着春天的正式开始,也...

2023-07-08 23:24:10查看全文 >>

惊蛰吃梨是哪里的风俗

惊蛰吃梨是哪里的风俗

在民间素有惊蛰吃梨的习俗。闻名海内的晋商渠家因先祖贩梨而发家,雍正年间,渠家十四代渠百川走西口,正是惊蛰之日,其父拿梨让...

2023-07-08 22:58:15查看全文 >>

惊蛰吃梨谐音(关于惊蛰吃梨的话语)

惊蛰吃梨谐音(关于惊蛰吃梨的话语)

2019年3月6日5时9分39秒,我国正式进入惊蛰节气。在民间素有惊蛰吃梨的习俗。在传统文化中,一般节日忌讳吃梨。不过惊...

2023-07-08 23:08:27查看全文 >>

文档排行