Я использую WkwebView в моем приложении для iOS для отображения веб -страницы. Он работает нормально, когда приложение работает или фона. Однако, после того, как я покинул приложение (проведите вверх) и перезапускает его, веб -просмотр показывает только о: blank вместо ожидаемого URL.struct WebView: UIViewRepresentable {
var url: URL?
var redirect: ((URL) -> Void)?
func makeUIView(context: Context) -> WKWebView {
let webView = WKWebView()
webView.isInspectable = true
webView.navigationDelegate = context.coordinator
return webView
}
func updateUIView(_ webView: WKWebView, context: Context) {
if let url = url {
webView.load(URLRequest(url: url))
}
}
func makeCoordinator() -> Coordinator {
Coordinator(parent: self)
}
class Coordinator: NSObject, WKNavigationDelegate {
var parent: WebView
init(parent: WebView) {
self.parent = parent
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
let javascript = """
if (document.querySelector('meta[name="viewport"]')) {
document.querySelector('meta[name="viewport"]').setAttribute('content', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no');
} else {
const meta = document.createElement('meta');
meta.setAttribute('name', 'viewport');
meta.setAttribute('content', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no');
document.getElementsByTagName('head')[0].appendChild(meta);
}
true;
"""
webView.evaluateJavaScript(javascript) { result, error in
if let error = error {
print("Error injecting JavaScript: \(error)")
} else {
print("JavaScript executed successfully.")
}
}
print("WebView finished loading.")
}
func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
print("WebView failed with error: \(error.localizedDescription)")
}
func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
print("WebView provisional load failed: \(error.localizedDescription)")
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = navigationAction.request.url, url.scheme == "oauthapp" {
parent.redirect?(url) // Pass deep link to your SwiftUI view
decisionHandler(.cancel) // Cancel navigation
return
}
decisionHandler(.allow)
}
}
}
< / code>
Comman> ContentView < / true>
URL? {
var components = URLComponents(string: authURL)
components?.queryItems = [
URLQueryItem(name: "response_type", value: "code"),
URLQueryItem(name: "client_id", value: clientID),
URLQueryItem(name: "redirect_uri", value: redirectURI),
URLQueryItem(name: "code_challenge", value: codeChallenge),
URLQueryItem(name: "code_challenge_method", value: "S256"),
URLQueryItem(name: "scope", value: scopes)
]
return components?.url
}
var body: some View {
if accessToken == nil {
WebView(url: buildAuthURL()){ url in
if let components = URLComponents(string: url.absoluteString),
let code = components.queryItems?.first(where: { $0.name == "code" })?.value {
print("Authorization code: \(code)")
authCode = code
requestAccessToken(code: code)
} else {
print("Failed to extract code from URL.")
}
}.ignoresSafeArea()
} else {
Text("Authorization Code: \((authCode ?? "").prefix(15))...")
Text("Access Token: \((accessToken ?? "").prefix(15))...")
}
}
< /code>
Что происходит: < /strong>
после брошения и повторного запуска приложения: < /p>
Появляется веб -просмотр. /> Примечания: < /strong> < /p>
Это происходит только после холодного старта (т.е. приложение было силой). < /li>
Сбой, а все остальное в приложении работает. Убедитесь, что Wkwebview правильно загружает предполагаемый URL вместо того, чтобы показывать о: пусто после холодного запуска?
Подробнее здесь: https://stackoverflow.com/questions/796 ... d-relaunch
IOS Wkwebview показывает о: Blank после приложения отказаться от приложения и перезапускания ⇐ IOS
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение