2

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!

2 Answers 2

13

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)
Sign up to request clarification or add additional context in comments.

11 Comments

Thanks paulvs, will this work if the url scheme is local? How do I get the local path to the html file embedded in xocde?
The URL Scheme must be local (for how to create one, look here).
What is the equivalent of UIWebView in OS X Swift? UIKit is not available for import when coding for OS X. And WebKit doesn't perform the function you described.
I haven't used it, but WebView does seem to be the OS X version of UIWebView.
it's not working in swift3 anymore.. any suggestions ?
|
0

this worked fine for me:

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    if request.url?.scheme == "com.example.app" {
        print("I’m some JavaScript hoho")
    }

    return true
}

Note: you have to add "com.example.app" or whatever in your xcode project settings. Go to info, scroll down and find URL Scheme. Add your desired scheme there. Leave the other stuff the way it is. Then it should work just fine.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.