Почему window.close не работает для нескольких окон - PullRequest
4 голосов
/ 23 сентября 2019

Я использовал Обработка нового окна внутри веб-просмотра .Я использовал решение 2 по упомянутой ссылке, которая добавляла новое окно в подпредставление .

Это решение, представленное в этой ссылке, работает довольно хорошо.Но проблема, с которой я столкнулся здесь, заключается в том, что при открытии нескольких окон в webview я не могу закрыть родительское окно, через которое оно было открыто.Открытие и закрытие окна контролируется простым кодом, написанным на удаленном сервере, состоящим из window.open("some_valid_url") и window.close() для открытия и закрытия окна соответственно.

Я даю веб-просмотр, скажем, www.someValidUrl.com, в котором есть код для открытия и закрытия окна.

Например: Main Page -> Then Main Page открывает окноA -> Тогда окно A Открывает окно B, Теперь, если я закрою окно B, то попробуйте закрыть окно A, окно A не закроется.

В результате я не могу вернуться в Mainстр.

Я добавляю код, который используется для открытия и закрытия окон соответственно:

class ViewController: UIViewController, UIWebViewDelegate, CLLocationManagerDelegate,WKUIDelegate,WKNavigationDelegate
{
    @IBOutlet weak var webView: WKWebView!
    var popupWebView: WKWebView?
    ...
    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
            view.addSubview(popupWebView!)
            return popupWebView!
        }
    func webViewDidClose(_ webView: WKWebView) {
        if webView == popupWebView {
            popupWebView?.removeFromSuperview()
            popupWebView = nil
        }
    }
    ...
}

Я поделился единственным кодом, который использовался для открытия и закрытия окон.Я хочу разрешить открытие и закрытие нескольких окон в моем приложении.Любая помощь будет принята с благодарностью.

Пожалуйста, спросите, нужна ли вам дополнительная информация по этому вопросу.

1 Ответ

2 голосов
/ 24 сентября 2019

Сразу после небольшого поиска, проб и ошибок я нашел ответ на свой вопрос, изменив код внутри webViewDidClose следующим образом:

    func webViewDidClose(_ webView: WKWebView) {
        webView.removeFromSuperview()
        popupWebView = nil
    }

Надеюсь, это поможет кому-то еще, кто сталкивается ста же проблема.

...