/**
webView的代理方法
*/
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
// 1.取出请求字符串
let requestString:NSString = (request.URL?.absoluteString)!
// 2.判断处理
let urlHeader = "app://"
let range = requestString.rangeOfString(urlHeader)
let location = range.location
if location != NSNotFound { // 包含了协议头
// 取出要操作的方法名称
let method = requestString.substringFromIndex(range.length)
// 包装成SEL
let sel = NSSelectorFromString(method)
// 执行
self.performSelector(sel)
}
return false
}
/**
* 访问相册
*/
func openCamera() -> Void {
let photoVC = UIImagePickerController()
photoVC.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
self.presentViewController(photoVC, animated: true, completion: nil)
}
说明:webView代理方法里监听开始加载新的请求,判断是否是我们定义的协议头。
在html里<a href="app://openCamera">打开相册</a>
,当用户点击这个超链接就会调用webView的代理方法。
或者js里 window.location.href="app://openCamera"
来实现url跳转也会调用webView的代理方法.