Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS 13及以下版本中,WKWebView如何调用异步Javascript函数(即返回承诺的函数)?_Javascript_Ios_Swift_Asynchronous_Wkwebview - Fatal编程技术网

在iOS 13及以下版本中,WKWebView如何调用异步Javascript函数(即返回承诺的函数)?

在iOS 13及以下版本中,WKWebView如何调用异步Javascript函数(即返回承诺的函数)?,javascript,ios,swift,asynchronous,wkwebview,Javascript,Ios,Swift,Asynchronous,Wkwebview,然而,iOS 14已经实现了,如何在iOS 13或更低版本中实现这一点 例如,假设JS的函数定义为: function upperCaseAsync(text) { return new Promise((resolve, reject) => { setTimeout(() => { resolve(text.toUpperCase()); }, 300); }); } 如何调用和处理最终承诺的结果?我尝试使用,但它抛出一个错误: Error

然而,iOS 14已经实现了,如何在iOS 13或更低版本中实现这一点

例如,假设JS的函数定义为:

function upperCaseAsync(text) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(text.toUpperCase());
    }, 300);
  });
}
如何调用和处理最终承诺的结果?我尝试使用,但它抛出一个错误:

Error Domain=WKErrorDomain Code=5“JavaScript执行返回的结果类型不受支持”


您需要注册回调处理程序,并将JS函数从返回
Promise
更改为发布
webkit
消息:
webkit.messageHandlers['smth'].postMessage('some info if needed')

let script=WKUserScript(源:,注入时间:,atDocumentStart,FormInframeOnly:false)
.configuration.userContentController.addUserScript(脚本)
.configuration.userContentController.add(,名称:“smth”)
扩展名:WKScriptMessageHandler{
func userContentController(userContentController:WKUserContentController,didReceive消息:WKScriptMessage){
切换消息名{
案例“smth”:
休息一下
违约:
返回
}
}
}

是的,我在想这个,但希望有更好的方法。非常感谢。