【问题标题】:How to handle `window.close` after being opened by the `webView.uiDelegate`?被`webView.uiDelegate`打开后如何处理`window.close`?
【发布时间】:2018-04-18 05:52:54
【问题描述】:

我正在为 iOS 开发一个 WKWebView-App,它增加了现有网站的功能,但我无法更改该网站的源代码。

当用户点击某些按钮时,它们会触发window.open。 我已经相应地成功覆盖了委托函数:

func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
    let contentController = WKUserContentController()
    let popups = getJSfromURL(url: Bundle.main.path(forResource: "popups", ofType: "js")!)
    contentController.addUserScript(popups)

    let webConfiguration = WKWebViewConfiguration()
    webConfiguration.userContentController = contentController

    let popupView = WKWebView(frame: .zero, configuration: webConfiguration)
    popupView.load(navigationAction.request)
    view = popupView
    return nil
}

在此弹出窗口中,有一个按钮调用this.close(),但浏览器抱怨说,它无法关闭,因为它不是由 javascript 打开的。

另一个按钮想要设置一些用户已经设置的参数,但浏览器抱怨,opener-参数是nil

我可以在打开弹出窗口之前以某种方式使用注入的 javascript 来设置开启器吗?

【问题讨论】:

    标签: ios swift xcode popup wkwebview


    【解决方案1】:

    我通过将呈现网站的来源设置为弹出窗口的 src 解决了这个问题。

    现在弹出窗口显示在相同的上下文中,并且可以毫无问题地回发给定的信息。

    例如:

    触发弹出窗口../training/NewTraining.aspx的按钮New调用javascript函数showNew()

    现在我只是简单地将这个函数添加到我注入的 javascript 中,以便执行它:

    function showNeu() {
        parent.parent.frames[1].location.href='../training/TrainingNeu.aspx';
    }
    

    我还更改了关闭弹出窗口的按钮Abort 的javascript:

    var btnAbort = document.getElementById('ASPxRoundPanel3_btnAbort');
    if (btnAbort) {
        btnAbort.onclick = function () {parent.window.location = "/MainPage.aspx";};
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2012-10-17
      相关资源
      最近更新 更多