【发布时间】:2014-11-16 23:54:54
【问题描述】:
iOS 8 中的新功能是一个错误,当发生多个 JavaScript 与本机代码通信时,该错误会阻止 UI。
原生到 Javascript 的通信是通过 UIWebView 的 stringByEvaluatingJavaScriptFromString,而 JavaScript 到原生的通信是通过自定义 URL 方案完成的。
如果我进行三个或更多 webview -> native 通信,前两个会立即发生,但后续的每次通信需要 10 秒。
有人遇到这种情况吗?
编辑:2014/09/23
具体来说,如果你连续对本机调用执行两次javascript,就会出现问题,
[self.webView stringByEvaluatingJavaScriptFromString:@"calliOS('aurlscheme://awebview?say=two'); calliOS('aurlscheme://awebview?say=cat');"];
其中 calliOS() 是一个 JavaScript 函数,用于 the iframe hack 通过 URL 方案调用本机代码。
如果您用直接调用“window.location”替换 iframe hack,
[self.webView stringByEvaluatingJavaScriptFromString:@"window.location='aurlscheme://awebview?say=two';window.location='aurlscheme://awebview?say=cat';"];
您丢失了除了最后一个 URL 方案请求。
总之,在对原生调用进行快速连续的 javascript 调用时,要么使用 iframe hack 并且 UI 冻结几秒钟,要么使用 window.location 方式并丢失所有内容,但最后一个请求。
【问题讨论】:
-
我也对此感兴趣。你能得到自定义的 URL 方案吗?到目前为止,我没有在 iOS 8 上的 webView:shouldStartLoadWithRequest:navigationType 中收到通知。
-
是的,它对我有用,虽然我使用
application:application handleOpenURL:url来捕获请求,解析 GET 查询字符串并将参数字典传递给相应的视图控制器。 -
@AlexanderCollins,请参阅下面的答案,它适用于 iOS 8。
标签: ios cocoa-touch ios8 uiwebview uikit