Mga Proxy Data Store ng WKWebView sa iOS 17+ at macOS 14+
Sa iOS 17 o macOS 14 at mas bago, itakda ang proxyConfigurations bago gawin at i-navigate ang view, kasama ang mga kredensyal kapag kailangan ng CONNECT intermediary ang mga ito.
import Network
import WebKit
@available(iOS 17.0, macOS 14.0, *)
@MainActor
func makeWebView(username: String, password: String) -> WKWebView {
let endpoint = NWEndpoint.hostPort(
host: "proxy.example.net", port: 8080)
let proxy = ProxyConfiguration(
httpCONNECTProxy: endpoint, tlsOptions: nil)
proxy.applyCredential(username: username, password: password)
let store = WKWebsiteDataStore.nonPersistent()
store.proxyConfigurations = [proxy]
let configuration = WKWebViewConfiguration()
configuration.websiteDataStore = store
return WKWebView(frame: .zero, configuration: configuration)
}Ginagamit ng ibinalik na view ang isang dedikadong di-persistenteng WKWebsiteDataStore. I-load ang gustong website sa pamamagitan ng view na iyon. Gamitin ang account ng intermediary o alisin ang applyCredential para sa proxy na hindi nangangailangan ng anuman. Para sa di-na-authenticate na sangay ng HTTP, ang listahan ng HTTP proxy ay nagbibigay ng mga kandidatong endpoint para sa data store.
Bawat view na nagbabahagi ng store na ito ay nagbabahagi ng patakaran nito sa proxy. Ang dedikadong store na ito ay mayroon ding panandaliang data ng website, kaya hindi nito namamana ang umiiral na pag-login sa website ng ibang view.
Panatilihin ang configuration bago ang navigation. Nagbabala ang WebKit na ang pagbabago ng proxy configuration ng isang store ay maaaring makagambala sa kasalukuyang networking nito.
Ang hiwalay na pagkuha ng URLSession na sinusundan ng loadHTMLString ay sumasaklaw lamang sa pagkuha ng HTML na iyon. Ang mga larawan, script at susunod na navigation ay gumagamit pa rin ng networking ng view; ang store ang pampublikong hook para i-configure ang rutang iyon.