2015-06-05 20 views
11

Ich mag JavaScript Rückgabewert in meinem Viewcontroller holen,Erster Rückgabewert von JavaScript in UIWebView

Das Problem ist, dass, wenn es kleine Menge von Daten wie String, ich bin es immer.

Aber wenn es große Daten wie JSON-Objekt gibt, zeigt es Null.

Wenn ich die gleiche JS-Funktion in Safari> Entwickeln> iOS-Simulator aufrufen, gibt es JSON-Objekt nach 1-2 Sekunden.

Hier ist mein Code:

var value = IBwebView.stringByEvaluatingJavaScriptFromString("get_small_string()") 
println(value) //Printing value 

aber druckt nil,

var value = IBwebView.stringByEvaluatingJavaScriptFromString("get_JSON()") 
println(value) //Printing nil 

jemand weiß, wie kann ich große Größe JS Rückgabewert in iOS Objekt holen?

+2

Haben Sie versucht, das Hinzufügen 'wie? NSDictionary'? –

+0

Ja, es gibt auch keine –

+0

Ist es nicht möglich, die NSURL-Klassen zum Abrufen des JSON zu verwenden? Sonst sind Sie den Verbindungsgeschwindigkeiten und Serverantwortzeiten ausgeliefert. Meine einzigen anderen Gedanken sind, ob Sie eine JSVirtualMachine verwenden können, wie ich es in [Playground] (https://github.com/sketchytech/Swiftography) gemacht habe, wo JS lokal ist. – sketchyTech

Antwort

5

Das ist mein Problem zu lösen,

var value = IBwebView.stringByEvaluatingJavaScriptFromString("get_JSON()") 

var err:NSError? 
var obj:AnyObject? = NSJSONSerialization.JSONObjectWithData(value!.dataUsingEncoding(NSUTF8StringEncoding)!, options:nil, error:&err) 

if let items = obj as? NSDictionary { 
var data1:String = items.objectForKey("data1") as? String 
var data2:String = items.objectForKey("data2") as? String 
var data3:String = items.objectForKey("data3") as? String 
} 
1

Wenn Ihre Java-Script-Methode "get_JSON()" mehr als 10 MB Daten zurückgibt, dann wird dies von der stringByEvaluatingJavaScriptFromString-Methode nicht zugelassen.

Oder Wenn es länger als 10 Sekunden dauert, um die Ausgabe zu verarbeiten, wird in diesem Fall kein Wert als Ausgabe ausgegeben.

+0

gibt es nur Textdaten, also offensichtlich weniger als 1MB, Es dauert 1-2 Sek in Safari> Entwickeln> iOS-Simulator, wie ich bereits erwähnt habe. –

+0

Wo hast du diese Methode aufgerufen? –

+0

Ich habe diese Methode auf der IBAction einer Taste aufgerufen, ich drücke Taste für Seite vollständig geladen. –

4

Sobald Sie ein Objekt zurückgeben wird es nicht funktionieren, was Sie können stattdessen versuchen, ist eine Zeichenfolgeversion des Objekts

JSON.stringify(yourObject); 

und analysieren diese Zeichenfolge auf der nativen Seite zurückzukehren.

+0

Danke, es hat funktioniert. Ich habe versucht, geparstes Objekt zu holen, und es hat nicht funktioniert. – ArunGJ