quarta-feira, 18 de outubro de 2017

Como executar coisas nativas em Javascript em Swift no iOS?

Para isso, basta importar o framework JavaScriptCore no seu projeto. :P

Bem, tem mais passos:

import UIKit
import JavaScriptCore

//Protocolo para externalizar a função
@objc protocol MainJS: JSExport {
//Função log
static func log(_ text: String);
}

//View Controller
class MainViewController: UIViewController, UIWebViewDelegate, MainJS

//WebView
@IBOutlet weak var webView: UIWebView!

//Implementação da função log
static func log(_ text: String) {
       print("[\(Date())] - \(text)")
}

//Carregou a View? (função)
override fund viewDidLoad() {
       super.viewDidLoad()
       webView.delegate = self
      //Cria uma página html com um botão
       webView.loadHTMLString("<html><head></head><body><button onclick="native.log('teste');"></button></body></html>", baseURL: Bundle.main.bundleURL)
}

//Carregou a Página? (função)
func webViewDidFinishLoad(_ webView: UIWebView) {
     //Pego o contexto javascript da webView
      if let context = webView.value(forKeyPath: "documentView.webView.mainFrame.javaScriptContext") as! JSContext? {
             //Executa qualquer método que esta no protocolo MainJS através do objeto "native" do javascript
             //Exemplo: native.log('exemplo');
             context.setObject(MainViewController.self, forKeyedSubscript: "native" as (NSCopying & NSObjectProtocol)!)
      }
}

Nenhum comentário: