SwiftUI:WebView 不加载特定页面
SwiftUI: WebView doesn't load specific page
我尝试在我的 WebView 中加载一个 url,它适用于“https://www.google.com”,但不适用于“https://[=24” =]”。
它显示“未找到,HTTP 错误 404:未找到请求的资源。”
奇怪的是,如果我在Google页面中google“sl.se”,点击sl.se,“www.sl.se”可以加载 WebView。有谁知道原因吗?
ContentView.swift
// ContentView.swift
struct ContentView: View {
@State private var shouldRefresh = false
var body: some View {
VStack{
Button(action: {
self.shouldRefresh.toggle()
}){
Text("Reload")
}
WebView(url: nil, reload: $shouldRefresh)
}
}
}
WebView.Swift
// WebView.swift
import WebKit
import SwiftUI
struct WebView: UIViewRepresentable{
var url: URL? // optional, if absent, one of below search servers used
@Binding var reload: Bool
private let urls = [URL(string: "https://google.com/")!, URL(string: "https://www.sl.se")!]
private let webview = WKWebView()
fileprivate func loadRequest(in webView: WKWebView) {
if let url = url {
webView.load(URLRequest(url: url))
} else {
let index = Int(Date().timeIntervalSince1970) % 2
print("load: \(urls[index].absoluteString)")
webView.load(URLRequest(url: urls[index]))
}
}
func makeUIView(context: UIViewRepresentableContext<WebView>) -> WKWebView {
loadRequest(in: webview)
return webview
}
func updateUIView(_ uiView: WKWebView, context: UIViewRepresentableContext<WebView>) {
if reload {
loadRequest(in: uiView)
DispatchQueue.main.async {
self.reload = false // must be async
}
}
}
}
您的代码没有任何问题。您只需要从 URL 中删除 www
。试试 https://sl.se
就可以了。
我尝试在我的 WebView 中加载一个 url,它适用于“https://www.google.com”,但不适用于“https://[=24” =]”。 它显示“未找到,HTTP 错误 404:未找到请求的资源。”
奇怪的是,如果我在Google页面中google“sl.se”,点击sl.se,“www.sl.se”可以加载 WebView。有谁知道原因吗?
ContentView.swift
// ContentView.swift
struct ContentView: View {
@State private var shouldRefresh = false
var body: some View {
VStack{
Button(action: {
self.shouldRefresh.toggle()
}){
Text("Reload")
}
WebView(url: nil, reload: $shouldRefresh)
}
}
}
WebView.Swift
// WebView.swift
import WebKit
import SwiftUI
struct WebView: UIViewRepresentable{
var url: URL? // optional, if absent, one of below search servers used
@Binding var reload: Bool
private let urls = [URL(string: "https://google.com/")!, URL(string: "https://www.sl.se")!]
private let webview = WKWebView()
fileprivate func loadRequest(in webView: WKWebView) {
if let url = url {
webView.load(URLRequest(url: url))
} else {
let index = Int(Date().timeIntervalSince1970) % 2
print("load: \(urls[index].absoluteString)")
webView.load(URLRequest(url: urls[index]))
}
}
func makeUIView(context: UIViewRepresentableContext<WebView>) -> WKWebView {
loadRequest(in: webview)
return webview
}
func updateUIView(_ uiView: WKWebView, context: UIViewRepresentableContext<WebView>) {
if reload {
loadRequest(in: uiView)
DispatchQueue.main.async {
self.reload = false // must be async
}
}
}
}
您的代码没有任何问题。您只需要从 URL 中删除 www
。试试 https://sl.se
就可以了。