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