Skip to content

Error: An unimplemented method has been called #13

Description

@qsd-faris

Hello, is it possible to return String value from Swift to JS?
For example, I would like to do something like this:

@objc protocol JavaScriptInterface {
    func someFunc() -> String
}
extension ViewController: JavaScriptInterface {
func someFunc() -> String {
        return "alert('close.')" //so alert would be presented in webView when this method is called.
    }
}

or

extension ViewController: JavaScriptInterface {
func someFunc() -> String {
        return "Something" //return some string to JS and let it handle it.
    }
}

In JS, I am calling it like this, for example when button is tapped:
return iosListener.someFunc(); //iosListener is a name of userContentController

This is how I implement webView:
webView = WKWebView(frame: view.bounds, configuration: setupWebViewConfiguration())
webView.navigationDelegate = self
webView.uiDelegate = self

    let javaScriptController = WKJavaScriptController(name: "iosListener", target: self, bridgeProtocol: JavaScriptInterface.self)
    webView.javaScriptController = javaScriptController
    webView.prepareForJavaScriptController()
    
    view.addSubview(webView)
    
    //then load the url

I am getting this error: [WKJavaScriptController] An unimplemented method has been called. (selector: someFunc)
Also worth mentioning, my script where I call this method is being called by evaluateJavascript(), when url is loaded. I am not using WKUserScript. My JS is on the web, and I am using evaluateJavascript() to return Swift method.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions