На WWDC 2025 компания Apple представила долгожданный нативный WebView для SwiftUI.
⚠️ Базовое использование:
// Инициализация WebPage
@State private var page = WebPage()
// Загрузка контента
WebView(page: page)
.onAppear {
let request = URLRequest(url: URL(string: "https://apple.com")!)
page.load(request)
}
⚙️ Ключевые возможности:
1️⃣ Загрузка локального контента.
let htmlString = "<h1>Локальный контент</h1>"
page.load(html: htmlString, baseURL: Bundle.main.resourceURL)
2️⃣ Отслеживание загрузки.
VStack {
// Индикатор прогресса
if page.isLoading {
ProgressView(value: page.estimatedProgress)
}
}3️⃣ Кастомные схемы URL.
Регистрация обработчика для собственных URL-схем:
let scheme = URLScheme("myapp")!
var config = WebPage.Configuration()
config.urlSchemeHandlers[scheme] = CustomSchemeHandler()
page = WebPage(configuration: config)4️⃣ Управление навигацией.
Контроль перехода по ссылкам через NavigationDecider:
class CustomNavigationDecider: WebPage.NavigationDeciding {
func decidePolicy(for action: WebPage.NavigationAction) async -> WKNavigationActionPolicy {
// Ваша логика обработки переходов
return .allow
}
}
...
let config = WebPage.Configuration()
let decider = CustomNavigationDecider()
WebPage(
configuration: config,
navigationDecider: decider
)5️⃣ JavaScript-взаимодействие.
let result = try await page.callJavaScript("document.title")
print("Заголовок страницы: \(result)")✅ Важные особенности:
🔹 Требует iOS 18+ / macOS Sequoia+.
🔹 Для сложной навигации обязателен NavigationStack.
🔹 Поиск по странице: .findNavigator(isPresented: $showSearch).
🔹 История посещений: page.backForwardList.items.
💡 Вывод:
Новый WebView это мощное решение для интеграции веб-контента в SwiftUI-приложения. Он предлагает современный API и полноценную функциональность.
➡️ Подписаться на канал
Мобильный трудоголик