2016-07-11 10 views
5

से भौगोलिक स्थान पास करना नीचे दिया गया कोड भौगोलिक स्थान प्राप्त करने और इसे प्रिंट करने में सक्षम है। मुझे यह कुछ ट्यूटोरियल ऑनलाइन और स्विफ्ट दस्तावेज़ों पर देखकर मिला। मैं स्विफ्ट 2 से जावास्क्रिप्ट से स्ट्रिंग्स के रूप में भौगोलिकता पास करना चाहता हूं। मैं भू-स्थान प्राप्त करने में सक्षम हूं, मुझे नहीं पता कि इन स्ट्रिंग्स को वेबव्यू में मेरे जावास्क्रिप्ट कोड में कैसे पास किया जाए।स्विफ्ट 2 व्यू कंट्रोलर से जावास्क्रिप्ट विधि

@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 

} 

मैं इस विधि के साथ अपनी वेबसाइट पर जावास्क्रिप्ट है:

function setIOSNativeAppLocation(lat , lon){ 

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

} 

मैं निम्नलिखित समाधान के साथ Pass variable from Swift to Javascript लेबल एक और सवाल पर ध्यान दिया है:

नीचे कोड मैं है

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)") 
    }) 
} 

हालांकि मेरे पास कोई ऐप डिलीगेट नहीं है, और मैं सीधे टी से चाहता हूं उनका विचार इन परिवर्तनों को बनाते हैं। इसलिए मुझे "अनसुलझा पहचानकर्ता ऐपडिलेगेट का उपयोग" मिलता है।

+0

बस एक अस्पष्ट विचार ... क्या आप वेबव्यू में स्थानीय संग्रहण सक्षम कर सकते हैं और फिर इसे जावास्क्रिप्ट से पढ़ सकते हैं? –

उत्तर

4

आप UIWebView प्रतिनिधि को लागू करना जावास्क्रिप्ट फ़ंक्शन को वेबव्यूडिडफिनिश लोड के बाद कॉल करना चाहिए।

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

जो आप लिंक करते हैं वह ऐप्पल टीवी के लिए है, जो आईओएस & UIWebView से बहुत अलग है।

किसी भी जावास्क्रिप्ट को चलाने का प्रयास करने से पहले आपको यह सुनिश्चित करने की आवश्यकता है कि वेब दृश्य लोड हो गया है (webViewDidFinishLoad देखें)।

जब वेब दृश्य के लिए तैयार है और आप अपने विवरण है आप एक String जिसमें जावास्क्रिप्ट आप पर अमल और उसके बाद करना चाहते हैं वेब दृश्य है कि पारित बना सकते हैं:

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

webView.stringByEvaluatingJavaScriptFromString(javaScript) 
संबंधित मुद्दे