ios webView与js交互与类似回调的实现(swift)
2016-04-26 09:29
696 查看
直接代码,首先加载一个webView:
<p><a href="http://www.baidu.com/"
id="BaiDu"
onclick="theFunc(this)" >去百度</a>
是一个指向万维网上的页面的链接。</p>
<script>
function theFunc(obj) {
webBack(obj.id)
}
</script>
webView = UIWebView.init(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height)) webView.delegate = self webView.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("File", ofType: "html")!)))//本地文件测试 webView.scrollView.delegate = self webView.scrollView.tag = 1 view.addSubview(webView)实现方法:
func webViewDidStartLoad(webView: UIWebView) { // print("开始加载") // webView.stringByEvaluatingJavaScriptFromString(" document.write(Date());")//与js的交互通过这个方法可以在网页中相当于加入一段js代码 // webView.stringByEvaluatingJavaScriptFromString("document.getElementById('demo').innerHTML = '段落已修改'") } // func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { if navigationType == .LinkClicked { print("LinkClicked") // let uid = webView.stringByEvaluatingJavaScriptFromString("method();") // print("uid = \(uid!)") // if request.URL?.absoluteString == "http://www.baidu.com/" { // let secView = WebViewController() // secView.webView.loadRequest(request) // self.navigationController?.pushViewController(secView, animated: true) // } // if request.URL?.absoluteString == "http://www.google.com/" { // let secView = WebViewController() // secView.webView.loadRequest(request) // self.navigationController?.pushViewController(secView, animated: true) // } return false } if navigationType == .BackForward { } if navigationType == .Other { } if navigationType == .FormSubmitted { print("FormSubmitted") } return true } func webView(webView: UIWebView, didFailLoadWithError error: NSError?) { if (error != nil) { kError = error } } func webViewDidFinishLoad(webView: UIWebView) { // print("jiazaijieshu") // let high = webView.stringByEvaluatingJavaScriptFromString("document.body.scrollHeight;")//此处运行js代码获取页面高度 // print(high!) let jsContext = webView.valueForKeyPath("documentView.webView.mainFrame.javaScriptContext")//获取当前js运行环境 let webBack: @convention(block) String -> () = { input in print(input) // return mutableString as String }//设置回调方法 (姑且这么称呼) //unsafeBitCast为类型转换将type @convention(block) Swift.String -> ()转换为AnyObject,且不会对这个操作进行检查,使用unsafeBitCast要<strong>确保两边类型正确</strong>,应该使用更安全的方法,目前没找到 jsContext!.setObject(unsafeBitCast(webBack, AnyObject.self), forKeyedSubscript: "simplifyString")//在上下文中加入回调 } func scrollViewDidScroll(scrollView: UIScrollView) { // if scrollView == webView.scrollView { // let y = webView.stringByEvaluatingJavaScriptFromString("window.pageYOffset") // print(y) // } }上面回调的使用是在web的代码中,
<p><a href="http://www.baidu.com/"
id="BaiDu"
onclick="theFunc(this)" >去百度</a>
是一个指向万维网上的页面的链接。</p>
<script>
function theFunc(obj) {
webBack(obj.id)
}
</script>
相关文章推荐
- 探索 Swift 中的 MVC-N 模式
- swift基本语法
- Swift 单例
- swift项目抽屉效果
- iOS实现UIImageView透明区域点击事件穿透(OC&swift)
- Swift基础学习1
- Swift基础学习2&nbsp;运算符
- Swift基础学习2&nbsp;逻辑控制&nbsp;结构
- Swift基础学习3&nbsp;字符串
- Swift中级学习1&nbsp;可选性
- Swift中级学习 数组Array
- Swift中级学习&nbsp;3&nbsp;字典DIctionary
- Swift中级学习&nbsp;3&nbsp;集合Set
- Swift&nbsp;函数
- Swift
- Swift 扩展(Extensions)(十四)
- swift中 ?? 运算符的使用, 类似于 ?: 运算符
- Swift开发2-数组,字典,字符串知识点
- Swift - 多线程实现方式
- swift-数组