• 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相关推荐

  1. A站 的 Swift 实践 —— 上篇

    背景介绍 AcFun俗称为"A站",作为一款二次元内容社区产品,以"认真你就输了"为文化导向,倡导轻松欢快的亚文化.AcFun涵盖了中长视频,小视频,番剧,文章 ...

  2. Swift 首次调试断点慢的问题解法 | 优酷 Swift 实践

    作者:段继统 & 夏磊 调试断点是与开发体验关系最为密切点之一,优酷iOS团队在外部调研时候发现,大量国内的iOS APP研发团队也遇到了类似的问题.考虑到国内Swift如火如荼的现状,我们尽 ...

  3. Swift实践:使用CoreData存储多种数据类的通讯录

    上一篇文章简单的实现了一个通讯录,说是通讯录实际上就只是一个简简单单的Name List.这次我们要往这个通讯录里面加入更多的元素,目的也是为了学习CoreData如何存储更多的数据类型. 完成后的效 ...

  4. 拥抱Swift!优酷Mac迁移Swift实践

    作者丨阿里文娱高级无线开发工程师 大斗 不管从"明里"还是"暗里"来看,苹果都在大力推荐使用 Swift 这一门语言.作为苹果的"亲儿子", ...

  5. Flutter有局限,拥抱Swift!优酷Mac迁移Swift实践

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨阿里文娱高级无线开发工程师 大斗 来源 | I ...

  6. Swift 实践之绘画

    绘画 工程目录 这里都使用Storyboard,方便而又快捷. 绘画的相关介绍 /*1 CGContextMoveToPoint 开始画线2 CGContextAddLineToPoint 画直线3 ...

  7. swift 实践- 10 -- UIProgressView

    import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoa ...

  8. swift:用UIWebView读取本地html文件

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...

  9. file input 移动端选择文件夹_免费 |《MNN For Swift》移动端机器学习实战课程

    自 2019 年 4 月在 Github 开源以来,淘系技术部-端智能团队自研的 MNN 推理引擎,因为其高性能.易用性以及优秀兼容性受到不少开发者的支持和喜爱.我们也把这份支持化作不断前进的动力,仅 ...

  10. iOS 保持界面流畅的技巧,满满都是收获。

    前言 学如逆水行舟,不进则退.共勉!!! 这篇文章会非常详细的分析 iOS 界面构建中的各种性能问题以及对应的解决思路,同时给出一个开源的微博列表实现,通过实际的代码展示如何构建流畅的交互. 演示项目 ...

最新文章

  1. GiliSoft Video Editor 13中文版
  2. LeetCode-位运算-36. 只出现一次的数字
  3. Git账号登录sonarqube 报错:没有权限 请联系管理员
  4. php 图片路径混淆,爬虫遇到了字符图片混淆。pytesseract识别图片字符
  5. 不放弃WM,依旧开发WM应用
  6. eclips图片为什么显示不了_为什么要定制工业平板电脑?定制工业平板电脑的七大理由...
  7. Linux中nginx安装基础教程
  8. Codeforces #105 DIV2 ABCDE
  9. 关于eclipse中maven项目的问题
  10. 将网站转换为应用程序的软件—“Unite”
  11. echarts实现颜色渐变
  12. jmeter分布式操作之远程启动功能
  13. 热烈欢迎中消云物联网研究院一行莅临上海铭控!
  14. 【考研经验】中国科学技术大学软件学院考研经历及复试回忆
  15. vue集合离线百度地图
  16. 关于 厦门“怪虫” 的一点感概
  17. 淘宝店群使用云服务器非常好
  18. Bootstrap入门使用
  19. 客户贷款逾期预测[7] - 模型融合
  20. TOS和DSCP总结

热门文章

  1. 三列自适应布局(圣杯布局)
  2. 安装webpack和webpack打包(此文转自Henery)
  3. idea 错误: -source 1.6 中不支持 diamond 运算符的解决办法
  4. Jupyter Notebook 作图显示中文
  5. Swift 再等等?我的答案是:快上车
  6. 轻松搞定技术面系列 1——基础篇
  7. 使用Web Deploy进行远程部署
  8. Android学习资源网站 1
  9. 原创Netty学习系列导航
  10. centos7安装启动zookeeper