Swift 实践之UIWebView
- 1.选中工程,点击右键,New File>在iOS下选中Othe>Empty,生成一个.js的脚本文件,将代码粘贴过去保存;
var script = document.createElement('script');
script.type = 'text/javascript';
script.text = '
function signin_go(){
location.href="ios:@signin_go";
}
';
document.getElementsByTagName('head')[0].appendChild(script);
- 2.实现过程;
//
// ViewController.swift
// Swift_UIWebView
//
// Created by 周文春 on 16/3/1.
// Copyright © 2016年 周文春. All rights reserved.
//
import UIKit
class ViewController: UIViewController,UIWebViewDelegate {
@IBOutlet weak var webView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
//加载网页
webView.loadRequest(NSURLRequest(URL: NSURL(string: "http://passport.cnblogs.com/user/signin")!))
webView.delegate = self
}
//webView代理方法,链接地址发生改变的时候调用
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool{
//获取链接的地址
let rurl = request.URL?.absoluteString
//判断链接的前缀,是都包含ios:,就相当于OC中的判断网页跳转一样
if (rurl!.hasPrefix("ios:")){
//判断之后,因为js脚本里面链接是以@连接的location.href="ios:@signin_go"所以这里我们将链接进行分割之后取到后面的signin_go方法,用来调用我们重写OC中的方法
let method = rurl!.componentsSeparatedByString("@")[1]
if method == "signin_go"{
signin_go()
}
return false
}
return true
}
//webView代理方法,网页内容加载完成时调用
func webViewDidFinishLoad(webView: UIWebView){
/**
注入脚本
*/
//获取我们名为app.js的脚本路径
let jsPath = NSBundle.mainBundle().pathForResource("app", ofType: "js")
//获取到脚本中的内容
var jsString :String = try! String(contentsOfFile: jsPath!, encoding: 4)
//将获得的文本内容后面的\n替换为空的字符串
jsString = jsString.stringByReplacingOccurrencesOfString("\n", withString: "")
//触发脚本
webView.stringByEvaluatingJavaScriptFromString(jsString as String)
}
func signin_go(){
NSLog("JS 调用了OC中的signin_go方法")
// //通过以下方法可以获得用户名或者密码等;
// var userName = webView.stringByEvaluatingJavaScriptFromString("脚本")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
- 3.点击网页中登录按钮,会调用OC中的signin_go方法;
参考原著出现的错误
- 1.参考原著的时候,会提示以下错误;
解决方法: 在前面加上try! ;
//获取到脚本中的内容
var jsString :String = try! String(contentsOfFile: jsPath!, encoding: 4)
- 1
- 2.encoding为0时,会提示以下错误信息,原因是编码格式错误;
2016-03-01 13:21:31.860 Swift_UIWebView[2292:905421] Incorrect NSStringEncoding value 0x0000 detected. Assuming NSASCIIStringEncoding. Will stop this compatiblity mapping behavior in the near future.
- 1
解决方法:将encoding值设置为4,设置UTF8的编码格式即可;
参考:http://www.cnblogs.com/wuxian/p/4470634.html
Swift 实践之UIWebView的更多相关文章
- [iOS Hybrid实践:UIWebView中Html中用JS调用OC方法,OC执行JS代码]
原理: 1.JS调用OC 每次webview执行跳转时都会被iOS给拦截,执行下面函数获得系统允许. 因此可以根据跳转信息转给系统,执行相应功能,比如打开相册等. // 网页中的每一个请求都会被触发 ...
- swift 实践- 08 -- UISegmentedControl
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoa ...
- swift - UISegmentedControl 和 UIWebView 的用法
这两个用法比较简单: 具体代码如下: 一.UISegmentedControl 1.UISegmentedControl的声明 var segment = UISegmentedControl() 2 ...
- swift 实践- 14 -- UIScrollView
import UIKit class ViewController: UIViewController ,UIScrollViewDelegate{ override func viewDidLoad ...
- swift 实践- 13 -- UIStepper
import UIKit class ViewController: UIViewController { var stepper: UIStepper! var label: UILabel! ov ...
- swift 实践- 12 -- UIPickerView
import UIKit class ViewController: UIViewController , UIPickerViewDelegate,UIPickerViewDataSource{ v ...
- swift 实践- 11 -- UISlider
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoa ...
- swift 实践- 10 -- UIProgressView
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoa ...
- swift 实践- 09 -- UIImageVIew
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoa ...
随机推荐
- POJ 1200 Hash
我的hash从来没写对过........ (白学了快一年OI --原来连个hash都没写对过) 但是 但是 今天是一个值得纪念的日子. 看看标题 我竟然在写hash的题解. (好了好了 废话少说) 题 ...
- MSDN性能分析相关网站收集
Visual Studio 性能分析初学者指南 | Microsoft Docshttps://docs.microsoft.com/zh-cn/visualstudio/profiling/begi ...
- 08.十分钟学会JSP传统标签编程
一.认识标签 1,说明:传统标签编程在开发中基本用不到,学习标签编程主要还是为了完善知识体系. 2,标签的主要作用:移除或减少jsp中的java代码 3,标签的主要组成部分及运行原理 4,简单标签示例 ...
- WPF自定义动画控件 风机
一:创建WPF项目 二:在项目下添加文件Themes,在此文件下添加新项 ”资源词典“取名为 Generic.xaml 注意大小写,之前遇到因为大小写不对应,导致出错的情况Generic.xam ...
- BOW模型在ANN框架下的解释
原文链接:http://blog.csdn.net/jwh_bupt/article/details/17540561 作者的视野好,赞一个. 哥德尔第一完备性定理,始终是没有能看完完整的证明,艹!看 ...
- 优动漫PAINT是什么?有哪些功能和特色
优动漫PAINT软件介绍: 优动漫PAINT是一款功能强大的漫画制作软件,该软件可以帮助漫画创作人员制作出完美,惟妙惟肖的漫画作品,它搭载了绘制漫画和插画所需的所有功能--丰富的笔工具.超强的笔压感应 ...
- jquery里面的选择器
jQuery 元素选择器 jQuery 使用 CSS 选择器来选取 HTML 元素. $("p") 选取 <p> 元素. $("p.intro") ...
- Python中的多个装饰器装饰一个函数
def wrapper1(func1): def inner1(): print('w1 ,before') func1() print('w1 after') return inner1 def w ...
- python tips:文件读取——换行符的问题
问题:在windows系统中,换行的符号是'\r\n'.python在读文件的时候为了系统兼容,会默认把'\r','n','\r\n'都视作换行.但是在windows文件中,可能在同一行中同时存在'\ ...
- CentOS6.6安装mysql-5.7.25二进制安装包简易教程
#####1,安装前首先确认系统版本 [root@bogon:~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@bogon:~] ...