少し遅れてしまいましたが、後ほど参考にしたいと思います。私がSwift 3とIOS 10で動作するようにしようとしている間に、@Bon Bonの答えが私を解決策に導いてくれました。 まず、あなたもWKUIDelegate
を実装する必要があるので、ViewController
宣言に追加します。
self.webView = WKWebView(frame: self.view.frame)
あなたが割り当てることも必要があります。たとえばので、好きなようにあなたは、WKWebView
オブジェクトをインスタンス化する場合次に
class ViewController: UIViewController, WKUIDelegate {
インスタンスのuiDelegate
プロパティの正しい値:
self.webView?.uiDelegate = self
そして、最終的にはあなたが@Bonボンで提供されたコードを使用していますが、スウィフト3で必要とされるいくつかの小さな違いがあることに注意することができ、例えばとして、presentViewController
メソッドの名前はpresent
次のようになります。
alert
を作っ
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)
}
、confirmation
およびtext input
は、内で正常に動作し、コンパイラの警告なしではXcode 8になります。私は熟練したSwiftプログラマーではないので、コードの正しさに関する有用なコメントは非常に高く評価されます。
[ios wkwebviewはjavascriptの警告ダイアログを表示しました](https://stackoverflow.com/q/26898941/6521116) –