目录
#最近加入了实习,开始了针对实际业务的测试。在移动端测试时,我发现一个比较有趣的现象(被测网站采用弹出式窗口):
Android端:浏览器提供弹窗权限提示,用户可手动允许。连续允许3次后,浏览器默认放行该网站弹窗。
iOS端:仅显示不可操作的错误提示(“窗口打开失败,请在浏览器的弹出式窗口和重定向设置中允许本网站操作”)和空白页面,无手动允许选项,如下图所示。
这是因为 苹果在 iOS 上的浏览器“技术霸权”——webkit!
一、什么是webkit?
1. 核心定义
WebKit 是一个开源的 浏览器渲染引擎(Rendering Engine),它的核心工作是:
解析:读取网页的 HTML/CSS/JavaScript 代码。
排版:计算每个像素该显示什么(布局、字体、颜色)。
渲染:把代码变成你看到的可视化页面。
换句话说:
WebKit 内核 就像是浏览器的“发动机”,负责把网页代码(HTML/CSS/JavaScript)转换成你看到的页面。
例子:就像汽车的引擎决定车速和油耗一样,WebKit 决定了浏览器如何加载网页、显示内容、处理弹窗等。
2. iOS 的特殊限制
WebKit 最初由苹果从 KHTML(Linux 引擎)分支而来,现由苹果主导开发。
iOS 的 App Store 审核规则 2.5.6 明确要求:所有浏览器必须使用 WebKit,禁止其他引擎,因此,夸克、Chrome 等浏览器在 iOS 上 本质是 Safari 的换皮版,功能受 WebKit 限制(如弹窗拦截策略与 Safari 一致)。
3. 弹窗拦截的逻辑
WebKit 会检查弹窗是否满足:
用户主动触发(如点击按钮)。
非用户触发(如页面加载完自动弹广告)。
如果是后者,引擎会直接拦截,并提示 "弹出窗口被阻止"。
二、为什么 iOS 必须用 WebKit?
1. 苹果的官方理由
安全:统一内核便于控制恶意网页。
性能:优化 iOS 设备电池续航。
生态控制:防止 Chrome/Firefox 通过自有引擎绕过苹果规则。
2. 实际后果
功能阉割:iOS 版 Chrome 无法使用 Google 的 Blink/V8 引擎,性能比安卓版差。
开发者适配成本:必须针对 WebKit 单独调试 CSS/JS。
3.然而……
2021 年欧盟《数字市场法案》认定此规则涉嫌垄断,苹果被迫在欧盟允许其他引擎(iOS 17.4+)
三、如何解决iOS端无法打开弹窗式网页?
1.用户
1.1 safari浏览器
以iOS17.5为例:在系统设置中下滑-->找到safari-->下滑,在通用中找到“阻止弹出式窗口”-->按钮置灰
1.2 夸克浏览器
7.13.0版本未提供“阻止弹出式窗口”设置项
长按该链接-->在新窗口打开
2.开发者
用
<a target="_blank">
替代 JS 弹窗或者给予用户文字提示--iOS用户:请长按链接在新页面打开,或改用chrome/safari
~~~~~~~~~~个人成长记录&学习成果分享~~~~~~~~~~