2016-07-11 20 views
5

Il codice seguente è in grado di ottenere la geolocalizzazione e di stamparlo. L'ho ottenuto basandomi su alcuni tutorial online e guardando i documenti Swift. Voglio passare le geolocazioni sotto forma di stringhe da Swift 2 a Javascript. Sono in grado di ottenere le GeoLocations, non so come passare queste stringhe al mio codice Javascript nella Webview.Passaggio di geolocalizzazione da Swift 2 ViewController a Javascript Metodo

Di seguito è il codice che ho:

@IBOutlet weak var Webview: UIWebView! 

let locMgr = CLLocationManager() 

override func viewDidLoad() { 

    super.viewDidLoad() 
    loadAddressURL() 
    locMgr.desiredAccuracy = kCLLocationAccuracyBest 
    locMgr.requestWhenInUseAuthorization() 
    locMgr.startUpdatingLocation() 
    locMgr.delegate = self //necessary 



} 

func locationManager(manager: CLLocationManager , didUpdateLocations locations: [CLLocation]){ 
    let myCurrentLoc = locations[locations.count-1] 
    var myCurrentLocLat:String = "\(myCurrentLoc.coordinate.latitude)" 
    var myCurrentLocLon:String = "\(myCurrentLoc.coordinate.longitude)" 

    print(myCurrentLocLat) 
    print(myCurrentLocLon) 

    //pass to javascript here by calling setIOSNativeAppLocation 

} 

ho javascript sul mio sito con questo metodo:

function setIOSNativeAppLocation(lat , lon){ 

    nativeAppLat = lat; 
    nativeAppLon = lon; 
    alert(nativeAppLat); 
    alert(nativeAppLon); 

} 

Ho guardato un'altra domanda etichettata Pass variable from Swift to Javascript con la seguente soluzione:

func sendSomething(stringToSend : String) { 
    appController?.evaluateInJavaScriptContext({ (context) -> Void in 

     //Get a reference to the "myJSFunction" method that you've implemented in JavaScript 
     let myJSFunction = evaluation.objectForKeyedSubscript("myJSFunction") 

     //Call your JavaScript method with an array of arguments 
     myJSFunction.callWithArguments([stringToSend]) 

     }, completion: { (evaluated) -> Void in 
      print("we have completed: \(evaluated)") 
    }) 
} 

Tuttavia non ho AppDelegate e voglio direttamente da t la sua visione rende questi cambiamenti. Quindi ottengo un "uso dell'identificatore non risolto AppDelegate".

+0

Solo una vaga idea ... È possibile abilitare l'archiviazione locale in Webview, quindi impostarlo e leggerlo in seguito da javascript? –

risposta

4

è necessario implementare UIWebView delegato La funzione JavaScript deve chiamare dopo webviewDidFinishLoad.

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    let url = NSURL (string: URLSTRING); 
    let requestObj = NSURLRequest(URL: url!); 
webView.delegate = self 
    webView.loadRequest(requestObj); 
    } 

    func webViewDidFinishLoad(webView: UIWebView) { 
      let javaScriptStr = "setIOSNativeAppLocation(\(myCurrentLoc.coordinate.latitude), \(myCurrentLoc.coordinate.longitude))" 

      webView.stringByEvaluatingJavaScriptFromString(javaScriptStr) 
     } 
4

La risposta a cui si fa riferimento è per Apple TV, che è molto diversa da iOS & UIWebView.

Prima di provare a eseguire qualsiasi javascript, è necessario assicurarsi che la visualizzazione Web abbia completato il caricamento (vedere webViewDidFinishLoad).

Quando la visualizzazione Web è pronto e hai i tuoi dati è possibile creare un String che contiene il codice JavaScript che si desidera eseguire e poi passare che alla vista web:

let javaScript = "setIOSNativeAppLocation(\(myCurrentLoc.coordinate.latitude), \(myCurrentLoc.coordinate.longitude))" 

webView.stringByEvaluatingJavaScriptFromString(javaScript) 
Problemi correlati