【问题标题】:Swift: How do I navigate to an HTML bookmark using # tags using WKWebView?Swift:如何使用 WKWebView 使用 # 标签导航到 HTML 书签?
【发布时间】:2021-01-24 03:18:19
【问题描述】:

我正在尝试使用 WKWebView 加载 HTML 文件,但我希望我的应用程序能够转到网页中的特定点。 HTML 本身自始至终都包含<a name="bookmark7"> 标记。如果我要使用浏览器,我会直接在文件名之后使用 # 附加链接名称:http://mywebsite.com/index.html#bookmark1

我尝试了以下方法无济于事:

let bookmark = "#bookmark1"
let url = Bundle.main.url(forResource: "index", withExtension: "html\(bookmark)", subdirectory: "website")!
uiView.loadFileURL(url, allowingReadAccessTo: url)

这给了我一个预览错误并且无法加载。如何跳转到 HTML 页面中的特定点?任何方法都可以。完整的 SwiftUI 视图如下:

import SwiftUI
import WebKit

struct CodeView: View {
    
    
    var body: some View {
        WebView()
        .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
    }
}

struct WebView: UIViewRepresentable {
    
    func makeUIView(context: Context) -> WKWebView {
        return WKWebView()
    }
    
    func updateUIView(_ uiView: WKWebView, context: Context) {
        
        let url = Bundle.main.url(forResource: "index", withExtension: "html", subdirectory: "website")!
        uiView.loadFileURL(url, allowingReadAccessTo: url)
    }
}

struct CodeView_Previews: PreviewProvider {
    static var previews: some View {
        CodeView()
    }
}

【问题讨论】:

    标签: html ios swift swiftui wkwebview


    【解决方案1】:

    这是工作变体(使用 Xcode 12 / iOS 14 测试)

    func updateUIView(_ uiView: WKWebView, context: Context) {
        guard let resourceURL = Bundle.main.url(forResource: "index", withExtension: "html", subdirectory: "website") else { return }
    
        let path = resourceURL.absoluteString + "#bookmark1"
        if let url = URL(string: path) {
            uiView.loadFileURL(url, allowingReadAccessTo: url)
        }
    }
    

    【讨论】:

    • 谢谢!我最终对 URLComponents 使用了不同的方式,但这种方式也可以。我必须解构 URL,添加一个片段,然后将新 URL 传回 webView。
    猜你喜欢
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 2021-03-20
    相关资源
    最近更新 更多