SwiftUI:WebView 不加载特定页面

Posted

技术标签:

【中文标题】SwiftUI:WebView 不加载特定页面【英文标题】:SwiftUI: WebView doesn't load specific page 【发布时间】:2020-09-26 18:46:36 【问题描述】:

我尝试在我的 WebView 中加载一个 url,它适用于“https://www.google.com”,但不适用于“https://www.sl.se”。 它显示“未找到,HTTP 错误 404:未找到请求的资源。”

奇怪的是,如果我在谷歌页面搜索“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
            
        
    

【问题讨论】:

【参考方案1】:

您的代码没有任何问题。您只需从 URL 中删除 www。试试https://sl.se,它会起作用的。

【讨论】:

以上是关于SwiftUI:WebView 不加载特定页面的主要内容,如果未能解决你的问题,请参考以下文章

iPad 的 WebView 未加载页面

在列表中加载 WebView 而无需重新加载 webView 内容 SwiftUI

SwiftUi 按钮操作重新加载 WebView

flutter_webview_plugin 加载全屏页面的简单使用

webview获取网页点击事件

表单提交后,WebView 未加载页面