目錄
一、什么是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
~~~~~~~~~~個人成長記錄&學習成果分享~~~~~~~~~~