WKWEBViewを利用して、特定のURLを表示する所謂ガワアプリを作成しようとしたところ、Javascriptのalert,confiem,promptが表示されません。
どの様にすればdelegateが作動するのかご指導頂けたら幸いです。
//ViewController.swift
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {
@IBOutlet var webView1: WKWebView!
@IBOutlet weak var testText: UILabel!
override func viewDidLoad() {
let defaultURL = "https://sample.com"
super.viewDidLoad()
webView1.uiDelegate = self if let targetURL = URL(string: defaultURL) { let request = NSURLRequest(url:targetURL as URL) webView1.load(request as URLRequest) } func webView(_ webView1: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) { testText.text = "Alert..." let alertController = UIAlertController(title: nil, message: message, preferredStyle: .actionSheet) alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: { (action) in completionHandler() })) present(alertController, animated: true, completion: nil) } func webView(_ webView1: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) { testText.text = "Confirm." 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(_ webView1: WKWebView, runJavaScriptTextInputPanelWithPrompt prompt: String, defaultText: String?, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (String?) -> Void) { testText.text = "Prompt..." 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) }
}
}
ViewControllerだけではなく、plistなど他に設定すべき項目があればご教授いただきたくお願いいたします。
※StoryBoardを使用しております。StoryBoard上は、初期状態にwkwebviewとuilabelを配置し、outlet接続した状態です。
XCode11にてiOS13.2向けで作成しております。
回答1件
あなたの回答
tips
プレビュー