iOS的webview中js如何更好的和原生交互

紫川_444868
  • 181

百度了下,在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>
回复
阅读 10.2k
2 个回答
✓ 已被采纳

phoneGap的传递机制你看的不够仔细,实际上是:
1、通过iframe设置src触发[webview:shouldStartLoadWithRequest]发送通知。
2、通过javascript执行获取消息队列,执行并回调。

-----当然以上不是重点-----
那么有没有其他办法呢,当年facebook是通过NSURLProtocol来来拦截webview指令请求,webview中只需要对xmlHttpRequest进行简单封装就能进行互通,互调了。当然,这样仍然不如android的java方法注入优雅。

js调用原生要用window.location.href

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏