Chemory Gunko
Chemory Gunko

Reputation: 33

Xcode WKWebView code to allow WebView to process popups

I am totally new to Xcode and the syntax is totally escaping me.

I have one thing left to do and then I've achieved what I need to within Xcode.

I need to insert a function that allows the WebView to process popups, but I have no idea where to begin inserting the code.

This is the current code:

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        let webView = WKWebView()
        let htmlPath = Bundle.main.path(forResource: "index", ofType: "html")
        let folderPath = Bundle.main.bundlePath
        let baseUrl = URL(fileURLWithPath: folderPath, isDirectory: true)
        do {
            let htmlString = try NSString(contentsOfFile: htmlPath!, encoding: String.Encoding.utf8.rawValue)
            webView.loadHTMLString(htmlString as String, baseURL: baseUrl)
        } catch {
            // catch error
        }
        webView.navigationDelegate = self
        view = webView
    }
}

How do I edit this in order to allow popups?

Please remember that I don't know how to add the solutions that I'm finding, so please show me where to insert the snippet as well.

Upvotes: 1

Views: 5080

Answers (1)

Bmacin
Bmacin

Reputation: 243

Try this code, hope it helps!

class ViewController: UIViewController {
var webView: WKWebView!
var popupWebView: WKWebView?
var urlPath: String = "WEBSITE_URL"

override func viewDidLoad() {
    super.viewDidLoad()
    setupWebView()
    loadWebView()
}
//MARK: Setting up webView
func setupWebView() {
    let preferences = WKPreferences()
    preferences.javaScriptEnabled = true
    preferences.javaScriptCanOpenWindowsAutomatically = true

    let configuration = WKWebViewConfiguration()
    configuration.preferences = preferences

    webView = WKWebView(frame: view.bounds, configuration: configuration)
    webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    webView.uiDelegate = self
    webView.navigationDelegate = self

    view.addSubview(webView)
}

func loadWebView() {
    if let url = URL(string: urlPath) {
        let urlRequest = URLRequest(url: url)
        webView.load(urlRequest)
    }
}

}

extension ViewController: WKUIDelegate {
//MARK: Creating new webView for popup
func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
    popupWebView = WKWebView(frame: view.bounds, configuration: configuration)
    popupWebView!.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    popupWebView!.navigationDelegate = self
    popupWebView!.uiDelegate = self
    view.addSubview(popupWebView!)
    return popupWebView!
}
//MARK: To close popup
func webViewDidClose(_ webView: WKWebView) {
    if webView == popupWebView {
        popupWebView?.removeFromSuperview()
        popupWebView = nil
    }
}
}
}

Upvotes: 4

Related Questions