PDF 关闭按钮的 WKWebview 弹出窗口?

WKWebview popup for PDF close button?

我的应用 运行 WKWebview 用于显示网站。单击某个元素时,它会调用 window.open() 并根据 link 显示 PDF:

func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
    popupWebView = WKWebView(frame: view.bounds, configuration: configuration)
    popupWebView!.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    popupWebView!.navigationDelegate = self
    popupWebView!.uiDelegate = self
    popupWebView!.allowsBackForwardNavigationGestures = true
    
    view.addSubview(popupWebView!)
    return popupWebView!
}

在我的例子中,它工作得很好。

我现在的问题是我无法返回,因为 PDF 是全屏打开的。是否可以在这种弹出式 webview 中启用导航控件?还是有什么方法可以通过“向后”滑动来控制向后行为?我尝试通过 allowsBackForwardNavigationGestures 进行操作,但它似乎不起作用...

我认为 WKWebView 没有简单的方法来添加后退按钮,您需要在视图(或导航控制器)上添加后退按钮。我已经能够这样做了:

观察 webView 实例的 canGoBack 属性 变化,以便 enable/disable (或 hide/show)后退按钮像这样:

popupWebView.addObserver(self, forKeyPath: #keyPath(WKWebView.canGoBack), options: .new, context: nil)

在视图控制器上:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if keyPath == "canGoBack" {
        if webView.canGoBack {
            // enable the back button
        } else {
            // disable the back button
        }
    }
}

最后,当用户点击后退按钮时,只需调用:

popupWebView.goBack()