百度了下,在iOS的webview中一般js调用原生代码,用的是url拦截的方式:
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {}
但这种方式比较恶心。。js调用原生要用window.location.href = "" 这样
如何能像安卓或phonegap那样更加优雅的用js调用原生代码。
比如在phonegap中,在网页里执行如下代码,手机就会弹出一条本地通知。
<script>
navigator.notification.alert(message, alertCallback, [title], [buttonName])
</script>
phoneGap的传递机制你看的不够仔细,实际上是:
1、通过iframe设置src触发[webview:shouldStartLoadWithRequest]发送通知。
2、通过javascript执行获取消息队列,执行并回调。
-----当然以上不是重点-----
那么有没有其他办法呢,当年facebook是通过NSURLProtocol来来拦截webview指令请求,webview中只需要对xmlHttpRequest进行简单封装就能进行互通,互调了。当然,这样仍然不如android的java方法注入优雅。