关键代码

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. CSS3实现三角形

    很多时候我们用到三角形这个效果: 我们可以用CSS3实现这个效果,怎去做呢?先阐述一下原理,我们定义一个空的div,设置这个div宽高为0,给这个div加上一个100px边框(这里是方便观察),得到的 ...

  2. Direct3D 11的资源

    资源(Resource) 如果把渲染流水线比喻成汽车装配线,资源就是流水线上需要输入的东西. 资源可分为两类:Textures(纹理)和Buffers(缓冲区). Textures可以简单地分为1维, ...

  3. Codeforces Round #311 (Div. 2) E - Ann and Half-Palindrome(字典树+dp)

    E. Ann and Half-Palindrome time limit per test 1.5 seconds memory limit per test 512 megabytes input ...

  4. IPMI 配置BMC用户设置

    IPMI 配置BMC用户设置 本文档共介绍5条ipmi设置user的命令,这些命令需要使用root权限才能使用,其中- H为需要操作的BMC ip,-I lanplus为使用rmcp+协议发送命令,- ...

  5. top 命令SQLServer-sybase-oracle

    SQLServer: select top 10 * from tablename; select top 10 percent from tablename; select * from table ...

  6. 使用Xcode和Instruments调试解决iOS内存泄露【转】

    转载自:http://blog.csdn.net/totogo2010/article/details/8233565 虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露 ...

  7. JavaScript split()

    http://www.w3school.com.cn/jsref/jsref_split.asp

  8. Mac_配置adb环境变量

    1.打开终端Terminal. 2.进入HOME目录:命令行输入 echo(这之间有一个空格) $HOME 3.创建.bash_profile文件:命令行输入 touch(这之间有一个空格).bash ...

  9. Cocos2d-x 3.x部署到安卓

    一.前期准备 下载下列软件: Python2.7 (https://www.python.org/downloads/) Cocos2d-x 3.x (http://www.cocos2d-x.org ...

  10. (转) Python in NetBeans IDE 8.0

    原地址: https://blogs.oracle.com/geertjan/entry/python_in_netbeans_ide_8 Copy this to the clipboard: ht ...