如何在`webView.uiDelegate`打开后处理`window.close`?

时间:2018-04-18 05:52:55

标签: ios swift xcode popup wkwebview

我正在开发一款适用于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在打开弹出窗口之前设置开启器吗?

1 个答案:

答案 0 :(得分:0)

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

现在弹出窗口显示在相同的上下文中,可以回复给出的信息没有问题。

例如:

触发弹出式窗口New的按钮../training/NewTraining.aspx会调用javascript-function 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";};
}