1

I need help to run javascript alerts, confirm in a simple app created with xcode with a webview inside

My code in ViewController.swift is:

import UIKit
import WebKit

class ViewController: UIViewController {


    @IBOutlet weak var WebView: WKWebView!

    override func viewDidLoad() {

        super.viewDidLoad()
        let url = URL(string: "MY_URL")
        let request = URLRequest(url: url!)

        WebView.load(request)

    }


}
Adi.S
  • 280
  • 1
  • 13

2 Answers2

1

First thing first add,

class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {

Second add deleagte to your code inside viewDidLoad()

override func viewDidLoad() {
    super.viewDidLoad()

    WebView = WKWebView(frame: self.view.frame)
    WebView.uiDelegate = self
    WebView.navigationDelegate = self
    view.addSubview(WebView!)

    // your code goes from year

    let url = URL(string: "MY_URL")
    let request = URLRequest(url: url!)
    WebView.load(request)

}

That's the basic information I can provide looking from your code.

For more detail refer to the Link, this may clear all your doubts : D

Adi.S
  • 280
  • 1
  • 13
1

I fix the problem with this code:

import UIKit

import WebKit

class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate {


@IBOutlet weak var WebView: WKWebView!


override func viewDidLoad() {

    super.viewDidLoad()

    WebView = WKWebView(frame: self.view.frame)
    WebView.uiDelegate = self
    WebView.navigationDelegate = self
    view.addSubview(WebView!)

    let url = URL(string: "MY_URL")
    let request = URLRequest(url: url!)

    WebView.load(request)


    // Do any additional setup after loading the view, typically from a nib.
}

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

    let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
    let title = NSLocalizedString("OK", comment: "OK Button")
    let ok = UIAlertAction(title: title, style: .default) { (action: UIAlertAction) -> Void in
        alert.dismiss(animated: true, completion: nil)
    }
    alert.addAction(ok)
    present(alert, animated: true)
    completionHandler()
}

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: "Cancella", style: .default, handler: { (action) in
        completionHandler(false)
    }))

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

}