UIWebview / WKWebView javascript调用句柄两个返回值?

时间:2017-04-24 13:35:54

标签: javascript ios swift3 uiwebview wkwebview

我有一个返回多个值的javascript函数。我试图使用Webview在我的iOS应用程序中调用该函数。我试过寻找类似的问题,但一无所获。检查下面的代码。 FYI单一返回值工作正常,我在#34; webview完成后调用此javascript"代表致电。

//Javascript function
function listABCs() constant returns (uint noOfABCs, address[] retABCAddresses) {
    return (abcAddresses.length, abcAddresses);
}

//iOS code
let script = "getAbcList()"
wkWebView?.evaluateJavaScript(script, completionHandler: { (response: Any?, error:Error?) in
       print("\n Error \(String(describing: error))")
       let res = response as? String
       print("Response = \(String(describing: response))")
})

提前致谢。

2 个答案:

答案 0 :(得分:0)

您可以在第一次将值设置为true时添加一个布尔值

//Create a variable received response
var receivedResponse = false

let script = "getKycList()"
wkWebView?.evaluateJavaScript(script, completionHandler: { (response: Any?, error:Error?) in
   print("\n Error \(String(describing: error))")
   if !receivedResponse {
      if let res = response as? String {
          // use the response now
          print("Response = \(res)")

         // set the receivedResponse to true
         receivedResponse = true
      }

   }

})

答案 1 :(得分:0)

我通过返回字典而不是字符串然后使用iOS中的字典来检索值来解决这个问题。

Javascript代码:

function customDictFrom(val1, val2) {

    var data_to_pass = {
        'val1': val1,
        'val2': val2
    };

    return data_to_pass;
}

function listABCs() constant returns (uint noOfABCs, address[] retABCAddresses) {
    var data_to_pass = customDictFrom(abcAddresses.length, abcAddresses);
    return data_to_pass;
}

Swift(Native)处理:

let script = "getAbcList()"
wkWebView?.evaluateJavaScript(script, completionHandler: { (response: Any?, error:Error?) in
       print("\n Error \(String(describing: error))")
       let res = response as? [String: Any] //Your response is here as a dictionary
       print("Response = \(String(describing: response))")
})

希望这有帮助。