SwiftUI WKWebView禁用链接交互

问题描述 投票:0回答:1

我正在寻找一种方法来禁止用户使用WKWebView与SwiftUI中的链接和图像进行交互。我已经尝试了各种方法,但是都没有成功,并且我已经看到并尝试了以下帖子,但没有任何效果:

WKWebview allowsLinkPreview to false breaks text selection

WKWebview: Disable interaction and clicks on links

我正在显示一个我有权显示的网站,但是由于其HTML结构异常,因此很难显示上下文,因此我决定尝试禁用与链接的用户交互。我仍然希望启用用户交互,以便用户可以滚动显示给他们的日历,但不能单击链接。如果您有任何建议,我欢迎他们。

这是我的代码:

struct CalanderWeb : UIViewRepresentable {
    @State var request: URLRequest

    func makeUIView(context: Context) -> WKWebView  {

        return WKWebView()
    }

    func updateUIView(_ uiView: WKWebView, context: Context) {
        uiView.scrollView.isScrollEnabled = true
        uiView.isOpaque = false
        uiView.allowsBackForwardNavigationGestures = false

// Code from srouce 2
        let source = """
            document.documentElement.style.webkitUserSelect='none';
            document.documentElement.style.webkitTouchCallout='none';
            var elems = document.getElementsByTagName('a'); for (var i = 0; i < elems.length; i++) { elems[i]['href'] = 'javascript:(void)'; }
        """

        let userScript = WKUserScript(source: source, injectionTime: .atDocumentEnd, forMainFrameOnly: true)

        let userContentController = WKUserContentController()
        userContentController.addUserScript(userScript)

        let configuration = WKWebViewConfiguration()
        configuration.userContentController = userContentController

        uiView.evaluateJavaScript(source, completionHandler: nil)
// End of external code

        uiView.load(request)
    }



}

谢谢。

ios swiftui webkit wkwebview
1个回答
0
投票

您必须在decidePolicyForNavigationAction中覆盖方法WKNavigationDelegate,并在完成时提供.cancel。这是示例代码:

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    decisionHandler(.cancel)
}
© www.soinside.com 2019 - 2024. All rights reserved.