Добавить объявление

SwiftUI WebView: работаем с веб-контентом

На 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 и полноценную функциональность.
16.09.2025 37 447