gpt4 book ai didi

javascript - WKWebView - Javascript 确认和警报不起作用

转载 作者:IT王子 更新时间:2023-10-29 05:25:05 24 4
gpt4 key购买 nike

我正在使用 WKWebView 打开 example.com,在那里我有一个应该打开 JS 警报的测试链接,但我无法让它显示在设备上,它只有在我从浏览器查看网站。

我正在使用 WKUIDelegate,并将这段代码添加到 ViewController.swift 文件中:

func webView(webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: (() -> Void)) {

NSLog("Hello")
}

当我单击生成 JS 警报的链接时,我在 XCode 控制台中看不到任何内容。

我错过了什么?

最佳答案

有点晚了,但我想补充一下我的经验以供将来引用。 @Bon Bon 的回答让我在尝试使用 Swift 3 和 IOS 10 时找到解决方案,在这种情况下,代码需要进行一些修改。首先,您还需要实现 WKUIDelegate,因此将其添加到 ViewController 声明中:

class ViewController: UIViewController, WKUIDelegate {

然后当你实例化WKWebView对象时,例如像这样:

self.webView = WKWebView(frame: self.view.frame)

您还需要为实例的 uiDelegate 属性分配正确的值:

self.webView?.uiDelegate = self

最后你就可以使用@Bon Bon提供的代码了,但是注意Swift 3要求有一些小的不同,比如presentViewController方法的名字变成了礼物 :

func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {

let alertController = UIAlertController(title: nil, message: message, preferredStyle: .actionSheet)

alertController.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action) in
completionHandler()
}))

self.present(alertController, animated: true, completion: nil)
}

func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) {

let alertController = UIAlertController(title: nil, message: message, preferredStyle: .actionSheet)

alertController.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action) in
completionHandler(true)
}))

alertController.addAction(UIAlertAction(title: "Cancel", style: .default, handler: { (action) in
completionHandler(false)
}))

self.present(alertController, animated: true, completion: nil)
}

func webView(_ webView: WKWebView, runJavaScriptTextInputPanelWithPrompt prompt: String, defaultText: String?, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (String?) -> Void) {

let alertController = UIAlertController(title: nil, message: prompt, preferredStyle: .alert)

alertController.addTextField { (textField) in
textField.text = defaultText
}

alertController.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action) in
if let text = alertController.textFields?.first?.text {
completionHandler(text)
} else {
completionHandler(defaultText)
}

}))

alertController.addAction(UIAlertAction(title: "Cancel", style: .default, handler: { (action) in

completionHandler(nil)

}))

self.present(alertController, animated: true, completion: nil)
}

这使得 alertconfirmationtext inputWKWebView 中正常工作,没有任何编译器警告Xcode 8。我不是专业的 Swift 程序员,所以任何关于代码正确性的有用评论都将不胜感激。

关于javascript - WKWebView - Javascript 确认和警报不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34185339/

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