Search code examples
javascriptswiftuiwebview

Call swift function with javascript using UIWebview


I apologize if this has been asked but I was unable to find any answer or solution. I am looking to call a JavaScript function from a "UIWebView" and listen for it in swift. Any example I have found uses "WKWebView". There has to be an easy way to listen to a JavaScript function like the below:

// HTML / JS
<div id ="myDiv" onclick="listenInSwift()">myItem</div>

Is this possible with a UIWebView? Thanks all!


Solution

  • Implement listenInSwift like this:

    function listenInSwift() {
        window.location = 'yoururlscheme://somehost?greeting=hello'
    } 
    

    Then listen for this URL with this code in your UIWebViewDelegate class:

    func webView(_ webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType navigationType: UIWebViewNavigationType) -> Bool {
        if request.URL.scheme == 'yoururlscheme' {
            print('Hello JavaScript...')
        }
    }
    

    Don't forget to register your URL Scheme (in this case 'yoururlscheme') in Xcode.

    To load a local file in the web view, try this:

    let baseURL = NSURL.fileURLWithPath(NSBundle.mainBundle().bundlePath);
    let relativePath = "www/\(file)"
    let fileURL = NSURL(string: relativePath, relativeToURL: baseURL);
    let URLRequest = NSURLRequest(URL: fileURL!);
    webView.loadRequest(URLRequest)