JS调用swift相册

window.location.href = 'tg:///openCamera'

在JS中用自己定义的协议头来协作JS和swift

css

body{
}

img{
    width:100%;
}

#mainTitle{
    text-align:center;
    font-size:20px;
    margin-top:20px;
    margin-bottom:8px;
}

#subTitle{
    text-align:left;
    font-size:12px;
    color:gray;
}

.time{
    margin-right:10px;
    margin-bottom:8px;
}

.all-img{
    text-align:center;
    font-size:14px;
    color:gray;
    margin:8px 0;
}

js

window.onload = function(){
    var allImg = document.getElementsByTagName("img");
    for(var i=0; i<allImg.length; i++){
        var img = allImg[i];
        img.id = i;
        img.onclick = function(){
            window.location.href = 'tg:///openCamera'
        }
    }
    var img = document.createElement('img');
    img.style.cssText = "width:50%";
    img.src = 'https://avatars0.githubusercontent.com/u/22094559?v=3&s=460';
    document.body.appendChild(img);
}

swift

//
//  ViewController.swift
//  JSInSwiftDemo
//
//  Created by targetcloud on 2016/12/13.
//  Copyright © 2016年 targetcloud. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var webview: UIWebView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let url = URL(string: "http://c.m.163.com/nc/article/C85G09IV000189FH/full.html")
        let request = URLRequest(url: url!)
        let dataTask = URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) in
            if(error == nil){
                let jsonData = try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments) as! [String:Any]
                self.dealNewsDetail(jsonData!)
            }
        })
        dataTask.resume()
    }

    func dealNewsDetail(_ jsonData: [String:Any])  {
        guard let allData = jsonData["C85G09IV000189FH"] as? [String:Any] else {return}
        var bodyHtml = allData["body"] as! String
        let title = allData["title"] as! String
        let ptime = allData["ptime"] as! String
        let source = allData["source"]  as! String
        let imgArr = allData["img"] as! [[String: Any]]
        for i in 0..<imgArr.count{
            let imgItem = imgArr[i]
            let ref = imgItem["ref"] as! String
            let imgTitle = imgItem["alt"] as! String
            let src = imgItem["src"] as! String
            let imgHtml = "<div class=\"all-img\"><img src=\"\(src)\"><div>\(imgTitle)</div></div>"
            bodyHtml = bodyHtml.replacingOccurrences(of: ref, with: imgHtml)
        }
        let titleHtml = "<div id=\"mainTitle\">\(title)</div>"
        let subTitleHtml = "<div id=\"subTitle\"><span>\(source)</span><span class=\"time\">\(ptime)</span></div>"
        
        let css = Bundle.main.url(forResource: "democss", withExtension: "css")
        let cssHtml = "<link href=\"\(css!)\" rel=\"stylesheet\">"
        
        let js = Bundle.main.url(forResource: "demojs", withExtension: "js")
        let jsHtml = "<script src=\"\(js!)\"></script>"
        
        let html = "<html><head>\(cssHtml)</head><body>\(titleHtml)\(subTitleHtml)\(bodyHtml)\(jsHtml)</body></html>"
        webview.loadHTMLString(html, baseURL: nil)
    }
    
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        let requestString: NSString = (request.url?.absoluteString)! as NSString
        let range = requestString.range(of: "tg:///")
        let location = range.location
        if(location != NSNotFound){
            let method = requestString.substring(from: range.length)
            let sel = NSSelectorFromString(method)
            self.perform(sel)
        }
        return true
    }
    
    func openCamera() {
        let photoVC = UIImagePickerController()
        photoVC.sourceType = UIImagePickerControllerSourceType.photoLibrary
        self.present(photoVC, animated: true, completion: nil)
    }
}


详细参见

点击打开链接

代码参见

GitHub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值