gpt4 book ai didi

ios - `window.close`被 `webView.uiDelegate`打开后如何处理?

转载 作者:行者123 更新时间:2023-11-30 11:34:40 27 4
gpt4 key购买 nike

我正在开发一个适用于 iOS 的 WKWebView-App,它可以增强现有网站的功能,但我无法更改该网站的源代码。

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

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

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

最佳答案

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

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

例如:

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

现在我只是将此函数添加到我注入(inject)的 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";};
}

关于ios - `window.close`被 `webView.uiDelegate`打开后如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49892139/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com