На
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)
}
Ключевые возможности:
Загрузка локального контента:
let htmlString = "
Локальный контент
"
page.load(html: htmlString, baseURL: Bundle.main.resourceURL)
Отслеживание загрузки:
VStack {
// Индикатор прогресса
if page.isLoading {
ProgressView(value: page.estimatedProgress)
}
}
Кастомные схемы URL:
Регистрация обработчика для собственных URL-схем:
let scheme = URLScheme("myapp")!
var config = WebPage.Configuration()
config.urlSchemeHandlers[scheme] = CustomSchemeHandler()
page = WebPage(configuration: config)
Управление навигацией:
Контроль перехода по ссылкам через
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
)
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 и полноценную функциональность.