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 相关文章推荐
javascript Array.remove() 数组删除
Aug 06 Javascript
js类的静态属性和实例属性的理解
Oct 01 Javascript
一个挺有意思的Javascript小问题说明
Sep 26 Javascript
jQuery.extend 函数详解
Feb 03 Javascript
通过url查找a元素应用案例
Apr 29 Javascript
JavaScript变量的作用域全解析
Aug 14 Javascript
jquery easyUI中ajax异步校验用户名
Aug 19 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
Jan 06 Javascript
flag和jq on 的绑定多个对象和方法(必看)
Feb 27 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
Jun 01 jQuery
详解Angular-cli生成组件修改css成less或sass的实例
Jul 27 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
May 20 Javascript
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
ajax+php打造进度条代码[readyState各状态说明]
2010/04/12 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
2014/08/28 PHP
PHP将字符分解为多个字符串的方法
2014/11/22 PHP
PHP实现冒泡排序的简单实例
2016/05/26 PHP
总结的一些PHP开发中的tips(必看篇)
2017/03/24 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
JS网络游戏-(模拟城市webgame)提供的一些例子下载
2007/10/14 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
jQuery load方法用法集锦
2011/12/06 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
JavaScript获得页面base标签中url的方法
2015/04/03 Javascript
jQuery实现信息提示框(带有圆角框与动画)效果
2015/08/07 Javascript
BootStrap实现树形目录组件代码详解
2016/06/21 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
详解自定义ajax支持跨域组件封装
2018/02/08 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
解决在layer.open中使用时间控件laydate失败的问题
2019/09/11 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
[01:39](回顾)各路豪强针锋相对,几经鏖战四强产生
2014/07/01 DOTA
Django的session中对于用户验证的支持
2015/07/23 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
python按照多个条件排序的方法
2019/02/08 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
经销商会议欢迎词
2014/01/11 职场文书
2014年母亲节演讲稿范文
2014/05/07 职场文书
天地会口号
2014/06/17 职场文书
2014年行政助理工作总结
2014/11/19 职场文书
2015年小学英语教师工作总结
2015/05/12 职场文书
教你利用python实现企业微信发送消息
2021/05/23 Python
python Django框架快速入门教程(后台管理)
2021/07/21 Python
golang中的struct操作
2021/11/11 Golang
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python