एक छोटी सी देर लेकिन मैं भविष्य में संदर्भ के लिए मेरे अनुभव में जोड़ना चाहते हैं। @Bon बॉन के जवाब मुझे समाधान के रास्ते पर लाया, जबकि मैं चीजों के साथ स्विफ्ट 3 और आईओएस 10, ऐसी स्थिति में कोड कुछ संशोधनों की जरूरत है काम करने के लिए कोशिश कर रहा था। सबसे पहले आप भी WKUIDelegate
लागू करने की आवश्यकता है, तो ViewController
घोषणा में जोड़ें: तो जैसे
class ViewController: UIViewController, WKUIDelegate {
फिर जब आप WKWebView
वस्तु का दृष्टांत, उदाहरण के लिए के रूप में:
self.webView = WKWebView(frame: self.view.frame)
आप आवंटित करने के लिए भी जरूरत है उदाहरण के uiDelegate
संपत्ति का सही मूल्य:
self.webView?.uiDelegate = self
फिर अंत में आप @Bon बॉन द्वारा प्रदान की कोड का उपयोग कर सकते हैं, लेकिन ध्यान दें कि कुछ छोटे स्विफ्ट 3 के लिए आवश्यक मतभेद, उदाहरण के लिए के रूप में कर रहे हैं कि, presentViewController
विधि का नाम हो जाता है present
:
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: .actionSheet)
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)
}
कि
alert
बनाया
, और text input
WKWebView
के भीतर सही ढंग से काम करने के लिए, में किसी भी कंपाइलर चेतावनी के बिना Xcode 8। मैं एक विशेषज्ञ स्विफ्ट प्रोग्रामर नहीं हूं, इसलिए कोड की शुद्धता के बारे में कोई भी उपयोगी टिप्पणी बहुत सराहना की जाएगी।
[ios wkwebview अब दिखा जावास्क्रिप्ट चेतावनी संवाद] (https://stackoverflow.com/q/26898941/6521116) –