关键代码

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

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 ..<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)
}
}

注意工程的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(网易新闻)的更多相关文章

  1. Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)

    在前面的文章中介绍的了如何使用Cordova进行跨平台应用的开发,使用Cordova的话基本上就不需要在写系统原生代码了,只要通过编写html页面和js方法即可. 但在有些特殊情况下,还是是需要htm ...

  2. iOS学习之网易新闻简易Demo

    简易NewsDemo代码分析 界面布局就不多说了.效果图:(自定义了三套Cell,最后一套Cell是页面最下方的"正在加载中..."Cell,图三.)         主要分析工程 ...

  3. Android调用系统相册和拍照的Demo

    最近我在群里看到有好几个人在交流说现在网上的一些Android调用系统相册和拍照的demo都有bug,有问题,没有一个完整的.确实是,我记得一个月前,我一同学也遇到了这样的问题,在低版本的系统中没问题 ...

  4. iOS UIWebView 中 js调用OC 打开相册 获取图片, OC调用js 将图片加载到html上

    线上html <!DOCTYPE html> <html> <head> <title>HTML中用JS调用OC方法</title> < ...

  5. Swift—调用系统相册和相机

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 24.0px Menlo; color: #000000 } p.p2 { margin: 0.0px 0. ...

  6. IE浏览器中使用js调用cmd命令行demo

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...

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

    原文:http://blog.csdn.net/hmt20130412/article/details/34523235 本来只是打算介绍一下addChildViewController这个方法的,正 ...

  8. 基于VUE,VUX组件开发的网易新闻页面搭建过程

    根据妙味课堂上的一个教程练习总结,供自己复习用 一.功能介绍 一个网易新闻客户端的浏览页面,通过网易新闻的api接口实时获取新闻数据,用vux搭建样式框架,以轮播图,文字滚动,图文列表等形式把内容展示 ...

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

    本文转载至 http://www.tuicool.com/articles/3ymMzub CSDN博客原文  http://blog.csdn.net/hmt20130412/article/det ...

随机推荐

  1. 同一台电脑启动两个或多个tomcat

    今天要在机子的tomcat上部署新的项目,需要访问的端口为80,与之前不同. 但要求不能更改原tomcat部署项目的端口,因为该tomcat内的项目正在对外使用中,且不能断开服务器. 那么,我就需要再 ...

  2. DB2数据库全系列版本安装介质下载地址

    网盘:http://pan.baidu.com/s/1qWE4D7A? ... qq-pf-to=pcqq.group官方:http://www-01.ibm.com/support/docview. ...

  3. python 安装 memcache

    方式一: python3 -m pip install python-memcached 方式二: pip3 install python-memcached 方式三: tar zxf python- ...

  4. js数字精度丢失

    http://www.cnblogs.com/snandy/p/4943138.html

  5. Palindrome Number 回文数

    判断一个数字是否是回文数,尝试不用其他额外空间. 注意: 负数也有可能成为回文数吗? 如果你想让int转为string,注意不用其他空间这个约束. 你也可以翻转一个int,但是有可能会溢出.     ...

  6. mysqlbinlog恢复数据

    操作命令: 复制代码代码如下: show binlog events in 'mysql-bin.000016' limit 10; reset master 删除所有的二进制日志flush logs ...

  7. C#中的表达式树的浅解

    表达式树可以说是Linq的核心之一,为什么是Linq的核心之一呢?因为表达式树使得c#不再是仅仅能编译成IL,我们可以通过c#生成一个表达式树,将结果作为一个中间格式,在将其转换成目标平台上的本机语言 ...

  8. hdu 1196

    Problem Description Given an positive integer A (1 <= A <= 100), output the lowest bit of A. F ...

  9. C#数组的指定位置复制函数

    1. // 源数组 - 起始位置 -目的数组 - 起始位置 - 长度 System.Array.Copy(mcu_data, 2, read_mcu_data_whole, 0, mcu_data.L ...

  10. C#界面设计疑问2:panel摆放问题

    1.问题1是这样的,网友意思让使用一个按键对应显示一个panel 即,http://zhidao.baidu.com/question/1924974374730559427.html 2.那么我在设 ...