js调用swift相册DEMO(网易新闻)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js调用swift相册DEMO(网易新闻)相关的知识,希望对你有一定的参考价值。

关键代码

 1 window.location.href = ‘tg:///openCamera‘ 

css

 1 body{
 2 }
 3 
 4 img{
 5     width:100%;
 6 }
 7 
 8 #mainTitle{
 9     text-align:center;
10     font-size:20px;
11     margin-top:20px;
12     margin-bottom:8px;
13 }
14 
15 #subTitle{
16     text-align:left;
17     font-size:12px;
18     color:gray;
19 }
20 
21 .time{
22     margin-right:10px;
23     margin-bottom:8px;
24 }
25 
26 .all-img{
27     text-align:center;
28     font-size:14px;
29     color:gray;
30     margin:8px 0;
31 }

js

 1 window.onload = function(){
 2     var allImg = document.getElementsByTagName("img");
 3     for(var i=0; i<allImg.length; i++){
 4         var img = allImg[i];
 5         img.id = i;
 6         img.onclick = function(){
 7             window.location.href = ‘tg:///openCamera‘
 8         }
 9     }
10     var img = document.createElement(‘img‘);
11     img.style.cssText = "width:50%";
12     img.src = ‘https://avatars0.githubusercontent.com/u/22094559?v=3&s=460‘;
13     document.body.appendChild(img);
14 }

swift

 1 //
 2 //  ViewController.swift
 3 //  JSInSwiftDemo
 4 //
 5 //  Created by targetcloud on 2016/12/13.
 6 //  Copyright ? 2016年 targetcloud. All rights reserved.
 7 //
 8 
 9 import UIKit
10 
11 class ViewController: UIViewController {
12 
13     @IBOutlet weak var webview: UIWebView!
14     
15     override func viewDidLoad() {
16         super.viewDidLoad()
17         let url = URL(string: "http://c.m.163.com/nc/article/C85G09IV000189FH/full.html")
18         let request = URLRequest(url: url!)
19         let dataTask = URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) in
20             if(error == nil){
21                 let jsonData = try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments) as! [String:Any]
22                 self.dealNewsDetail(jsonData!)
23             }
24         })
25         dataTask.resume()
26     }
27 
28     func dealNewsDetail(_ jsonData: [String:Any])  {
29         guard let allData = jsonData["C85G09IV000189FH"] as? [String:Any] else {return}
30         var bodyHtml = allData["body"] as! String
31         let title = allData["title"] as! String
32         let ptime = allData["ptime"] as! String
33         let source = allData["source"]  as! String
34         let imgArr = allData["img"] as! [[String: Any]]
35         for i in 0..<imgArr.count{
36             let imgItem = imgArr[i]
37             let ref = imgItem["ref"] as! String
38             let imgTitle = imgItem["alt"] as! String
39             let src = imgItem["src"] as! String
40             let imgHtml = "<div class=\\"all-img\\"><img src=\\"\\(src)\\"><div>\\(imgTitle)</div></div>"
41             bodyHtml = bodyHtml.replacingOccurrences(of: ref, with: imgHtml)
42         }
43         let titleHtml = "<div id=\\"mainTitle\\">\\(title)</div>"
44         let subTitleHtml = "<div id=\\"subTitle\\"><span>\\(source)</span><span class=\\"time\\">\\(ptime)</span></div>"
45         
46         let css = Bundle.main.url(forResource: "democss", withExtension: "css")
47         let cssHtml = "<link href=\\"\\(css!)\\" rel=\\"stylesheet\\">"
48         
49         let js = Bundle.main.url(forResource: "demojs", withExtension: "js")
50         let jsHtml = "<script src=\\"\\(js!)\\"></script>"
51         
52         let html = "<html><head>\\(cssHtml)</head><body>\\(titleHtml)\\(subTitleHtml)\\(bodyHtml)\\(jsHtml)</body></html>"
53         webview.loadHTMLString(html, baseURL: nil)
54     }
55     
56     func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
57         let requestString: NSString = (request.url?.absoluteString)! as NSString
58         let range = requestString.range(of: "tg:///")
59         let location = range.location
60         if(location != NSNotFound){
61             let method = requestString.substring(from: range.length)
62             let sel = NSSelectorFromString(method)
63             self.perform(sel)
64         }
65         return true
66     }
67     
68     func openCamera() {
69         let photoVC = UIImagePickerController()
70         photoVC.sourceType = UIImagePickerControllerSourceType.photoLibrary
71         self.present(photoVC, animated: true, completion: nil)
72     }
73 }

注意工程的info.plist中加ATS及Privacy - Photo Library Usage Description

运行效果如下:

技术分享

图1 是info.plist配置及运行效果,动态用 img数组替换新闻主体中的<!--IMG#0-->等占位

技术分享

图2是从自己在HTML文件中插入自己图片的效果

技术分享

图3是从charles中分析的结构

 

完整的DEMO 代码地址见github

https://github.com/targetcloud

以上是关于js调用swift相册DEMO(网易新闻)的主要内容,如果未能解决你的问题,请参考以下文章

怎么用html5或js调用手机的摄像头拍照上传以及调用手机相册选取照片

demo1---相册

iOS开发 剖析网易新闻标签栏视图切换(addChildViewController属性介绍)

js循环倒计时代码 每5秒循环倒计时到0 再从5秒开始 到0之后刷新页面 类似网易的滚动新闻

网易新闻小案例

JS之选项卡-仿网易新闻