Search code examples
javascriptioswebviewswiftuiwebview

Swift stringByEvaluatingJavaScriptFromString


I try to use some javascript on my WebView with the new

stringByEvaluatingJavaScriptFromString function

I m not quiet familiar with the syntax so i tried

 func stringByEvaluatingJavaScriptFromString( "document.documentElement.style.webkitUserSelect='none'": String) -> String? 

as shown here https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIWebView_Class/index.html#//apple_ref/occ/instm/UIWebView/stringByEvaluatingJavaScriptFromString: but i get a error that "Expected '.' separator"


Solution

  • The method you are trying to call is prototyped as the following:

    func stringByEvaluatingJavaScriptFromString(_ script: String) -> String?

    This means :

    • It takes a String as single parameter
    • It returns an optional String (String?)

    You need to have an instance of UIWebView to use it:

    let result = webView.stringByEvaluatingJavaScriptFromString("document.documentElement.style.webkitUserSelect='none'")
    

    Because the return type is optional, it needs to be unwrapped before you can use it. But be careful, it may not have a value (i.e. it may be equal to nil) and unwrapping nil values leads to runtime crashes.

    So you need to check for that before you can use the returned string:

    if let returnedString = result {
        println("the result is \(returnedString)")
    }
    

    This means: If result is not nil then unwrap it and assign it to a new constant called returnedString.

    Additionally, you can wrap it together with:

    let script = "document.documentElement.style.webkitUserSelect='none'"
    if let returnedString = webView.stringByEvaluatingJavaScriptFromString(script) {
        println("the result is \(returnedString)")
    }
    

    Hope this makes sense to you.