webview回调怎么解决

首页 > 实用技巧 > 作者:YD1662023-07-08 23:27:56

webview回调怎么解决,(1)

一 背景

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

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

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

二 基础回顾

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

1 iOS 网络设计与 Cookie 管理

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

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

webview回调怎么解决,(2)

从上至下模块依次为:

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

webview回调怎么解决,(3)

核心内容包含:

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

2 WKWebView 多进程模型

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

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

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

多进程模型详解

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

webview回调怎么解决,(4)

首页 1234下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.