【问题标题】:Getting return value from JavaScript in UIWebView从 UIWebView 中的 JavaScript 获取返回值
【发布时间】:2015-06-05 06:38:36
【问题描述】:

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

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

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

当我在 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 返回值?

【问题讨论】:

  • 你试过加as? NSDictionary吗?
  • 是的,它也是 nil
  • 不能使用 NSURL 类来获取 JSON 吗?否则,您将受到连接速度和服务器响应时间的支配。我唯一的其他想法是您是否可以使用 JSVirtualMachine,就像我在 Playground 中所做的那样,所有 JS 都是本地的。

标签: javascript ios objective-c swift uiwebview


【解决方案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 脚本方法“get_JSON()”返回超过 10 MB 的数据,则 stringByEvaluatingJavaScriptFromString 方法不允许。

    或者如果处理输出的时间超过 10 秒,在这种情况下,您将得到 nil 值作为输出。

    【讨论】:

    • 只有文本数据,所以明显不到1MB,在Safari>开发> iOS模拟器中需要1-2秒,正如我所说的。
    • 你在哪里调用了这个方法?
    • 我在一个按钮的IBAction上调用了这个方法,页面完全加载后我按下按钮。
    • 抱歉,这是保密的。
    • 那么只有最后一个建议,您可以尝试在 webviewdidfinish 委托中调用此方法
    猜你喜欢
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2016-09-13
    • 2015-03-05
    • 2011-11-16
    相关资源
    最近更新 更多