问题 在UIWebView中从JavaScript获取返回值


我想在ViewController中获取JavaScript返回值,

问题是,如果像String这样的数据很少,我就会得到它。

但是如果有像JSON对象那样的大数据,它显示为零。

当我在Safari> Develop> iOS模拟器中调用相同的JS函数时,它会在1-2秒后给出JSON对象。

这是我的代码:

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

但这打印为零,

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

谁知道如何在iOS对象中获取大尺寸的JS返回值?


3525
2018-06-05 06:38


起源

你试过添加吗? as? NSDictionary?
是的,它也给了零 - Zaid Pathan
是不是可以使用NSURL类来获取JSON?否则,您将受到连接速度和服务器响应时间的影响。我唯一的想法是你是否可以使用JSVirtualMachine,就像我在这里做的那样 操场 所有JS都是本地的。 - sketchyTech


答案:


这解决了我的问题,

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
}

5
2018-06-09 11:55





一旦你将返回一个对象它将无法工作,你可以尝试返回一个字符串版本的对象

JSON.stringify(yourObject);

并在本机端解析此字符串。


4
2018-06-08 07:01



谢谢它的工作。我试图获取已解析的对象,但它无法正常工作。 - ArunGJ


如果您的java脚本方法“get_JSON()”返回的数据超过10 MB,则stringByEvaluatingJavaScriptFromString方法不允许这样做。

或者如果处理输出需要10秒以上的时间,那么您将获得nil值作为输出。


1
2018-06-05 06:47



只有文本数据,所以显然小于1MB,在Safari> Develop> iOS模拟器中需要1-2秒,正如我所提到的。 - Zaid Pathan
你在哪里调用这种方法? - Santu C
我在一个按钮的IBAction上调用了这个方法,我在页面完全加载后按下按钮。 - Zaid Pathan
好的,请你分享网址,以便我可以在这里查看 - Santu C
对不起,但是保密。 - Zaid Pathan