目录

一、什么是webkit?

1. 核心定义

2. iOS 的特殊限制

3. 弹窗拦截的逻辑

二、为什么 iOS 必须用 WebKit?

1. 苹果的官方理由

2. 实际后果

3.然而……

三、如何解决iOS端无法打开弹窗式网页?

1.用户

1.1 safari浏览器

1.2 夸克浏览器

2.开发者


#最近加入了实习,开始了针对实际业务的测试。在移动端测试时,我发现一个比较有趣的现象(被测网站采用弹出式窗口):

  • 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

~~~~~~~~~~个人成长记录&学习成果分享~~~~~~~~~~

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

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

相关文章

【github】从本地更新仓库里的文件笔记

1. 打开GitHub官网&#xff0c;并登录到您的账户。 2. 在页面右上角的搜索栏中&#xff0c;输入您要更新的仓库名称&#xff0c;并选择相应的仓库进入。 3. 在仓库页面中&#xff0c;找到并点击红色的“Code”按钮&#xff0c;然后复制仓库的HTTPS或者SSH链接。 4. 右键包含…

Excel基础:数据编辑

Excel是Windows下最常用的数据处理工具&#xff0c;本文详细介绍Excel的数据编辑功能&#xff0c;熟练掌握编辑技巧能可以极大提升工作效率&#xff0c;文章最后附加了一张总结思维导图&#xff0c;方便大家查找和记忆。 文章目录 一、数据输入1.1 覆盖输入1.2 追加输入1.3 任…

JavaScript中Object()的解析与应用

在JavaScript中&#xff0c;Object() 是一个基础构造函数&#xff0c;用于创建对象或转换值为对象类型。它既是语言的核心组成部分&#xff0c;也提供了一系列静态方法用于对象操作。以下是详细解析和应用示例&#xff1a; 一、Object() 的基本行为 作为构造函数&#xff08;…

stream使用案例

1.1 查找所有的偶数并求和 public static void p1() { List<Integer> numbers Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); int sum numbers.stream() .filter(num -> num % 2 0) .mapToInt(Integer::intValue) .sum() ; System.err.printf…

力扣 刷题(第七十一天)

灵感来源 - 保持更新&#xff0c;努力学习 - python脚本学习 4的幂 解题思路 位运算条件&#xff1a;4 的幂的二进制表示中只有一个 1&#xff0c;且位于奇数位&#xff08;如 4 100&#xff0c;4 10000&#xff09;。模运算条件&#xff1a;4 的幂减 1 后能被 3 整除&…

深度学习使用Pytorch训练模型步骤

训练模型是机器学习和深度学习中的核心过程&#xff0c;旨在通过大量数据学习模型参数&#xff0c;以便模型能够对新的、未见过的数据做出准确的预测。 训练模型通常包括以下几个步骤&#xff1a; 1.数据准备&#xff1a; 收集和处理数据&#xff0c;包括清洗、标准化和归一化…

Unity_导航操作(鼠标控制人物移动)_运动动画

文章目录 前言一、Navigation 智能导航地图烘焙1.创建Plan和NavMesh Surface2.智能导航地图烘焙 二、MouseManager 鼠标控制人物移动1.给场景添加人物&#xff0c;并给人物添加导航组件2.编写脚本管理鼠标控制3.给人物编写脚本&#xff0c;订阅事件&#xff08;添加方法给Mouse…

6. 接口分布式测试pytest-xdist

pytest-xdist实战指南&#xff1a;解锁分布式测试的高效之道 随着测试规模扩大&#xff0c;执行时间成为瓶颈。本文将带你深入掌握pytest-xdist插件&#xff0c;利用分布式测试将执行速度提升300%。 一、核心命令解析 加速安装&#xff08;国内镜像&#xff09; pip install …

预训练语言模型

预训练语言模型 1.1Encoder-only PLM ​ Transformer结构主要由Encoder、Decoder组成&#xff0c;根据特点引入了ELMo的预训练思路。 ELMo&#xff08;Embeddings from Language Models&#xff09;是一种深度上下文化词表示方法&#xff0c; 该模型由一个**前向语言模型&…

Altera PCI IP target设计分享

最近调试也有关于使用Altera 家的PCI IP&#xff0c;然后分享一下代码&#xff1a; 主要实现&#xff1a;主控作为主设备&#xff0c;FPGA作为从设备&#xff0c;主控对FPGA IO读写的功能 后续会分享FPGA作为主设备&#xff0c; 从 FPGA通过 memory写到主控内存&#xff0c;会…

基于机器学习的智能文本分类技术研究与应用

在当今数字化时代&#xff0c;文本数据的爆炸式增长给信息管理和知识发现带来了巨大的挑战。从新闻文章、社交媒体帖子到企业文档和学术论文&#xff0c;海量的文本数据需要高效地分类和管理&#xff0c;以便用户能够快速找到所需信息。传统的文本分类方法主要依赖于人工规则和…

前端项目3-01:登录页面

一、效果图 二、全部代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>码农魔盒</title><style>.bg{position: fixed;top: 0;left:0;object-fit: cover;width: 100vw;height: 100vh;}.box{width: 950px;he…

Nexus CLI:简化你的分布式计算贡献之旅

探索分布式证明网络的力量&#xff1a;Nexus CLI 项目深入解析 在今天的数字时代&#xff0c;分布式计算和去中心化技术正成为互联网发展的前沿。Nexus CLI 是一个为 Nexus 网络提供证明的高性能命令行界面&#xff0c;它不仅在概念上先进&#xff0c;更是在具体实现中为开发者…

IBW 2025: CertiK首席商务官出席,探讨AI与Web3融合带来的安全挑战

6月26日至27日&#xff0c;全球最大的Web3安全公司CertiK亮相伊斯坦布尔区块链周&#xff08;IBW 2025&#xff09;&#xff0c;首席商务官Jason Jiang出席两场圆桌论坛&#xff0c;分享了CertiK在AI与Web3融合领域的前沿观察与安全见解。他与普华永道土耳其网络安全服务主管Nu…

Vivado 五种仿真类型的区别

Vivado 五种仿真类型的区别 我们还是用“建房子”的例子来类比。您已经有了“建筑蓝图”&#xff08;HLS 生成的 RTL 代码&#xff09;&#xff0c;现在要把它建成真正的房子&#xff08;FPGA 电路&#xff09;。这五种仿真就是在这个过程中不同阶段的“质量检查”。 1. 行为…

小程序快速获取url link方法,短信里面快速打开链接

获取小程序链接方法 uni.request({url:https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appidwxxxxxxxxxxxx&secret111111111111111111111111111111111,method:GET,success(res) {console.log(res.data)let d {"path": "/xxx/…

Spring 框架(1-4)

第一章&#xff1a;Spring 框架概述 1.1 Spring 框架的定义与背景 Spring 是一个开源的轻量级 Java 开发框架&#xff0c;于 2003 年由 Rod Johnson 创立&#xff0c;旨在解决企业级应用开发的复杂性。其核心设计思想是面向接口编程和松耦合架构&#xff0c;通过分层设计&…

RabitQ 量化:既省内存又提性能

突破高维向量内存瓶颈:Mlivus Cloud RaBitQ量化技术的工程实践与调优指南 作为大禹智库高级研究员,拥有三十余年向量数据库与AI系统架构经验的我发现,在当今多模态AI落地的核心场景中,高维向量引发的内存资源消耗问题已成为制约系统规模化部署的“卡脖子”因素。特别是在大…

创客匠人:创始人 IP 打造的得力助手

在当今竞争激烈的商业环境中&#xff0c;创始人 IP 的打造对于企业的发展愈发重要。一个鲜明且具有影响力的创始人 IP&#xff0c;能够为企业带来独特的竞争优势&#xff0c;提升品牌知名度与美誉度。创客匠人在创始人 IP 打造过程中扮演着不可或缺的角色&#xff0c;为创始人提…

如何为虚拟机上的 Manjaro Linux启用 VMware 拖放功能

如果你的Manjaro 发行版本是安装在 VMware Workstation Player 上使用的 &#xff0c;而且希望可以通过拖放功能将文件或文件夹从宿主机复制到客户端的Manjaro 里面&#xff0c;那么可以按照以下的步骤进行操作&#xff0c;开启拖放功能。 在 VMware 虚拟机上安装 Manjaro 后&…