Получение возвращаемого значения из JavaScript в UIWebView
Я хочу получить возвращаемое значение JavaScript в моем ViewController,
Проблема заключается в том, что если есть небольшое количество данных, таких как String, я получаю его.
Но если есть большие данные, такие как объект JSON, он показывает nil.
Когда я вызываю ту же функцию JS в Safari > Develop > iOS simulator, она дает объект JSON через 1-2 секунды.
Вот мой код:
var value = IBwebView.stringByEvaluatingJavaScriptFromString("get_small_string()")
println(value) //Printing value
но это печатает нуль,
var value = IBwebView.stringByEvaluatingJavaScriptFromString("get_JSON()")
println(value) //Printing nil
Кто-нибудь знает, как я могу получить возвращаемое значение JS большого размера в объекте iOS?
Ответы
Ответ 1
Это решит мою проблему,
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
}
Ответ 2
Как только вы вернете объект, он не сработает, вместо этого вы можете попытаться вернуть стробированную версию вашего объекта
JSON.stringify(yourObject);
И проанализируйте эту строку с внутренней стороны.
Ответ 3
Если ваш метод java script "get_JSON()" возвращает более 10 МБ данных, тогда его не допускает метод stringByEvaluatingJavaScriptFromString.
Или, если для обработки вывода требуется более 10 секунд, в этом случае вы получите значение nil в качестве вывода.