JS交互点击WKWebView中的图片实现预览效果


Posted in Javascript onJanuary 05, 2018
  • Swift 4.0
  • WKWebView

1.注入js代码 (重点)

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
  let jsGetImages =
    "function getImages(){" +
    "var objs = document.getElementsByTagName(\"img\");" +
    "var imgScr = '';" +
    "for(var i=0;i<objs.length;i++){" +
    "imgScr = imgScr + objs[i].src + '+';" +
    "};" +
    "return imgScr;" +
    "};"
  webView.evaluateJavaScript(jsGetImages, completionHandler: nil)
  webView.evaluateJavaScript("getImages()") { (data, err) in
    let imageUrl:String = data as! String
    var urlArry = imageUrl.components(separatedBy: "+")
    urlArry.removeLast()
    self.imgUrlArray.addObjects(from: urlArry)
    for url in self.imgUrlArray{
      let photo = SKPhoto.photoWithImageURL(url as! String)
      photo.shouldCachePhotoURLImage = false // you can use image cache by true(NSCache)
      self.images.append(photo)
    }
  }
  var jsClickImage:String
  jsClickImage = 
    "function registerImageClickAction(){" +
    "var imgs=document.getElementsByTagName('img');" +
    "var length=imgs.length;" +
    "for(var i=0;i<length;i++){" +
    "img=imgs[i];" +
    "img.onclick=function(){" +
    "window.location.href='image-preview:'+this.src}" +
    "}" +
    "}"
  webView.evaluateJavaScript(jsClickImage, completionHandler: nil)
  webView.evaluateJavaScript("registerImageClickAction()", completionHandler: nil)
}

2.使用SKPhotoBrowser框架实现图片预览功能

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
  let requestString = navigationAction.request.url?.absoluteString
  print(requestString!)
  if (requestString?.hasPrefix("image-preview"))!{
    let imgUrl = NSString.init(string: requestString!).substring(from: "image-preview:".count )
    let index = imgUrlArray.index(of: imgUrl)
    let browser = SKPhotoBrowser(photos: images)
    browser.initializePageIndex(index)
    present(browser, animated: true, completion: {})
  }
  decisionHandler(.allow) //一定要加上这句话 
}

总结

以上所述是小编给大家介绍的JS交互点击WKWebView中的图片实现预览效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
禁止JQuery中的load方法装载IE缓存中文件的方法
Sep 11 Javascript
js 实现css风格选择器(压缩后2KB)
Jan 12 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
Apr 03 Javascript
node.js中的http.response.end方法使用说明
Dec 14 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
Mar 27 Javascript
基于js实现微信发送好友如何分享到朋友圈、微博
Nov 30 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
Mar 06 Javascript
详解Javascript获取缓存和清除缓存API
May 25 Javascript
基于js文件加载优化(详解)
Jan 03 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
Mar 26 Javascript
vue实现购物车案例
May 30 Javascript
Vue多选列表组件深入详解
Mar 02 Vue.js
Vue组件的使用教程详解
Jan 05 #Javascript
基于three.js编写的一个项目类示例代码
Jan 05 #Javascript
js中this对象用法分析
Jan 05 #Javascript
Node中使用ES6语法的基础教程
Jan 05 #Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
Jan 05 #Javascript
vue脚手架中配置Sass的方法
Jan 04 #Javascript
Angular4学习教程之HTML属性绑定的方法
Jan 04 #Javascript
You might like
php封装的page分页类完整实例代码
2020/02/01 PHP
jquery实现手风琴效果实例代码
2013/11/15 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
Bootstrap基本布局实现方法详解
2016/11/25 Javascript
AngularJS解决ng-if中的ng-model值无效的问题
2017/06/21 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
详解vue移动端日期选择组件
2018/02/22 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
浅谈Redux中间件的实践
2018/07/27 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
[02:30]联想杯DOTA2完美世界全国高校联赛—北京站现场
2015/11/16 DOTA
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
python smtplib发送带附件邮件小程序
2018/05/22 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
详解windows python3.7安装numpy问题的解决方法
2018/08/13 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
python 定时器,轮询定时器的实例
2019/02/20 Python
基于Python安装pyecharts所遇的问题及解决方法
2019/08/12 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
2020/06/29 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
俄罗斯购买自行车网站:Vamvelosiped
2021/01/29 全球购物
战略合作意向书
2014/07/29 职场文书
研修心得体会
2014/09/04 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书
七年级作文之《我和我的祖国》观后感作文
2019/10/18 职场文书
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js
PyTorch中的torch.cat简单介绍
2022/03/17 Python
大型强子对撞机再次重启探索“第五种自然力”
2022/04/29 数码科技