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
转载于:https://www.cnblogs.com/Free-Thinker/p/7115318.html
Swift 实践之UIWebView相关推荐
- A站 的 Swift 实践 —— 上篇
背景介绍 AcFun俗称为"A站",作为一款二次元内容社区产品,以"认真你就输了"为文化导向,倡导轻松欢快的亚文化.AcFun涵盖了中长视频,小视频,番剧,文章 ...
- Swift 首次调试断点慢的问题解法 | 优酷 Swift 实践
作者:段继统 & 夏磊 调试断点是与开发体验关系最为密切点之一,优酷iOS团队在外部调研时候发现,大量国内的iOS APP研发团队也遇到了类似的问题.考虑到国内Swift如火如荼的现状,我们尽 ...
- Swift实践:使用CoreData存储多种数据类的通讯录
上一篇文章简单的实现了一个通讯录,说是通讯录实际上就只是一个简简单单的Name List.这次我们要往这个通讯录里面加入更多的元素,目的也是为了学习CoreData如何存储更多的数据类型. 完成后的效 ...
- 拥抱Swift!优酷Mac迁移Swift实践
作者丨阿里文娱高级无线开发工程师 大斗 不管从"明里"还是"暗里"来看,苹果都在大力推荐使用 Swift 这一门语言.作为苹果的"亲儿子", ...
- Flutter有局限,拥抱Swift!优酷Mac迁移Swift实践
Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨阿里文娱高级无线开发工程师 大斗 来源 | I ...
- Swift 实践之绘画
绘画 工程目录 这里都使用Storyboard,方便而又快捷. 绘画的相关介绍 /*1 CGContextMoveToPoint 开始画线2 CGContextAddLineToPoint 画直线3 ...
- swift 实践- 10 -- UIProgressView
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoa ...
- swift:用UIWebView读取本地html文件
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...
- file input 移动端选择文件夹_免费 |《MNN For Swift》移动端机器学习实战课程
自 2019 年 4 月在 Github 开源以来,淘系技术部-端智能团队自研的 MNN 推理引擎,因为其高性能.易用性以及优秀兼容性受到不少开发者的支持和喜爱.我们也把这份支持化作不断前进的动力,仅 ...
- iOS 保持界面流畅的技巧,满满都是收获。
前言 学如逆水行舟,不进则退.共勉!!! 这篇文章会非常详细的分析 iOS 界面构建中的各种性能问题以及对应的解决思路,同时给出一个开源的微博列表实现,通过实际的代码展示如何构建流畅的交互. 演示项目 ...
最新文章
- GiliSoft Video Editor 13中文版
- LeetCode-位运算-36. 只出现一次的数字
- Git账号登录sonarqube 报错:没有权限 请联系管理员
- php 图片路径混淆,爬虫遇到了字符图片混淆。pytesseract识别图片字符
- 不放弃WM,依旧开发WM应用
- eclips图片为什么显示不了_为什么要定制工业平板电脑?定制工业平板电脑的七大理由...
- Linux中nginx安装基础教程
- Codeforces #105 DIV2 ABCDE
- 关于eclipse中maven项目的问题
- 将网站转换为应用程序的软件—“Unite”
- echarts实现颜色渐变
- jmeter分布式操作之远程启动功能
- 热烈欢迎中消云物联网研究院一行莅临上海铭控!
- 【考研经验】中国科学技术大学软件学院考研经历及复试回忆
- vue集合离线百度地图
- 关于 厦门“怪虫” 的一点感概
- 淘宝店群使用云服务器非常好
- Bootstrap入门使用
- 客户贷款逾期预测[7] - 模型融合
- TOS和DSCP总结