美文网首页
iOS 怎么查看UIWebView中的图片

iOS 怎么查看UIWebView中的图片

作者: iwasee | 来源:发表于2016-07-22 09:26 被阅读298次

    1.获取html数据

    let htmlData = NSData(contentsOfURL: url) // 获取网页数据

    2.创建JS代码

    * JS代码实现如下

    * 创建数据保存img标签的src属性的数组imgsrcs

    * getElementsByTagName获取所有的img元素images

    * 遍历images中的一个个image元素

    * 拿到image元素的parentNode元素

    * parentNode删除image子元素

    * 创建a标签的元素

    * 设置a标签的href

    * 把image元素添加到a的子元素中

    * 把a元素添加到parentNode元素中

    * 获取image的src属性添加到数组imgsrcs中

    * 创建函数photos 返回imgsrcs中所有元素通过>><<拼接的字符串

    * 大致目的有两个:

    * 1.给图片都添加到a标签中,一边UIWebView的delegate能响应

    * func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool

    * 2.photos函数是为了能通过UIWebView的方法能得到所有的图片资源

    * let str = self.webView.stringByEvaluatingJavaScriptFromString(“photos()”)

    3.将JS代码添加html文件中

    let _bodyRange = hs.rangeOfString(“”

    let html = hs.stringByReplacingCharactersInRange(_bodyRange, withString: script)

    4.将新的html保存到本地,重新加载html数据

    5.通过a标签的事件,触发UIWebViewDelegate的

    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool

    事件,处理相关的问题

    具体代码突下:

    /**

    * 通过url得到网页数据,添加自己需要修改的JS代码到网页数据中,生成新的网页数据

    /

    func html(url: String) -> String? {

    if let url = NSURL(string: url) {

    let htmlData = NSData(contentsOfURL: url) // 获取网页数据

    var htmlStr: String? = nil

    // JS代码

    /*

    * JS代码实现如下

    * 创建数据保存img标签的src属性的数组imgsrcs

    * getElementsByTagName获取所有的img元素images

    * 遍历images中的一个个image元素

    * 拿到image元素的parentNode元素

    * parentNode删除image子元素

    * 创建a标签的元素

    * 设置a标签的href

    * 把image元素添加到a的子元素中

    * 把a元素添加到parentNode元素中

    * 获取image的src属性添加到数组imgsrcs中

    * 创建函数photos 返回imgsrcs中所有元素通过>><<拼接的字符串

    * 大致目的有两个:

    * 1.给图片都添加到a标签中,一边UIWebView的delegate能响应

    * func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool

    * 2.photos函数是为了能通过UIWebView的方法能得到所有的图片资源

    * let str = self.webView.stringByEvaluatingJavaScriptFromString(“photos()”)

    */

    let script = "\t\n\t\t imgsrcs = Array(); \n\t\t images = document.getElementsByTagName(\"img\"); \n\t\t for (i = 0; i < images.length; i++) { \n\t\t\t image = images[i]; \n\t\t\t imageParentNode = image.parentNode; \n\t\t\t imageParentNode.removeChild(image); \n\t\t\t a = document.createElement(\"a\"); \n\t\t\t  a.setAttribute(\"href\", String(i)); \n\t\t\t a.appendChild(image); \n\t\t\t imageParentNode.appendChild(a); \n\t\t\t imgsrcs.push(image.src); \n\t\t\t document.write(image.src + \"
    \") \n\t\t } \n\t function photos() { imgsrcsStr = String(); for (i = 0; i < imgsrcs.length; i++) { imgsrcsStr += imgsrcs[i]; if (i+1 != imgsrcs.length) { imgsrcsStr += \">><<\"; } } return imgsrcsStr; } \t\n\n \n"

    if let hd = htmlData {

    htmlStr = String(data: hd, encoding: NSUTF8StringEncoding)

    if let hs = htmlStr {

    if let _bodyRange = hs.rangeOfString(“”) {

    // 添加JS到网页数据中

    let html = hs.stringByReplacingCharactersInRange(_bodyRange, withString: script)

    // try! html.writeToFile(“/Users/xf-bao/Desktop/index.html”, atomically: true, encoding: NSUTF8StringEncoding)

    return html // 返回新的网页数据

    }

    }

    return nil

    }

    }

    return nil

    }

    // UIWebViewDelegate a标签的事件响应

    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {

    // print(“UIWebViewNavigationType: (navigationType)”)

    if navigationType == .LinkClicked {

    if !self.images.isEmpty {

    } else {

    let str = self.webView.stringByEvaluatingJavaScriptFromString(“photos()”)

    // print(str)

    if let https = str?.componentsSeparatedByString(“>><<”) {

    for http in https {

    if http.hasPrefix(“http”) {

    let photo = MWPhoto(URL: NSURL(string: http))

    self.images.append(photo)

    }

    }

    }

    }

    let url = request.URL

    let urlStr = url?.absoluteString

    let numStr = urlStr?.componentsSeparatedByString(“/”).last

    if let numStr = numStr {

    if let i = Int(numStr) {

    self.title = nil

    let browser = MWPhotoBrowser(delegate: self)

    browser.setCurrentPhotoIndex(UInt(i))

    browser.displayActionButton = false

    self.navigationController?.pushViewController(browser, animated: true)

    }

    }

    }

    return true

    }

    // 初始化UIWebView对象

    var flag = false

    let htmlStr = html(self.url)

    if let hs = htmlStr {

    let htmlData = hs.dataUsingEncoding(NSUTF8StringEncoding)

    if let hd = htmlData {

    flag = true

    let path = NSTemporaryDirectory().stringByAppendingString(“index.html”)

    try! NSFileManager.defaultManager().createDirectoryAtPath(path, withIntermediateDirectories: true, attributes: nil)

    hd.writeToFile(path, atomically: true)

    self.locUrl = NSURL(fileURLWithPath: path)

    self.webView.loadHTMLString(hs, baseURL: self.locUrl)

    self.webView.delegate = self

    }

    }

    if !flag {

    StyleHelper.showAlertWithTitle(“加载页面失败!”, doneText: “我知道了”, doneCallback: { (alert) -> (Void) in

    alert.close()

    })

    self.navigationController?.popViewControllerAnimated(true)

    }

    另外两个思路:

    1.获取html源码后,解析html文件,拿到img的src

    NSXMLParser来处理

    2.通过JavaScriptCore的JS与OC交互来处理

    没有思路,本来是想用这种方法来处理的,感觉实现不了,不知道怎么拿到JSContent,也不知道怎么响应图片的点击事件,是可以写JS代码给img标签设置onclick,但是怎么拿到UIWebView的所有img标签呢?

    相关文章

      网友评论

          本文标题:iOS 怎么查看UIWebView中的图片

          本文链接:https://www.haomeiwen.com/subject/gycijttx.html