Greasy Fork

Greasy Fork is available in English.

DMZJ漫画转为手机版链接

DMZJ漫画更新页面链接转为手机版

当前为 2017-08-21 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        DMZJ漫画转为手机版链接
// @author      Crab
// @namespace   [email protected]
// @description DMZJ漫画更新页面链接转为手机版
// @include     *//i.178.com/~sms.cartoon.cartoonListUid*
// @include     *//i.178.com/~sms.cartoon.cartoonNewList*
// @include     *//m.dmzj.com/*
// @include     *//v2.api.dmzj.com*
// @include     *//manhua.dmzj.com/*
// @include     *//user.dmzj.com/my/subscribe/mh/*
// @include     /^https?:\/\/i\.dmzj\.com\/\/?subscribe.*/
// @compatible  firefox 34+
// @compatible  Chrome 45+
// @version     0.8.6
// @grant       none
// ==/UserScript==

(function(){

if(top !== self && ['m.dmzj.com', 'v2.api.dmzj.com', 'manhua.dmzj.com/zt/module/'].some(url => new RegExp('^https?:\\/\\/' + url).test(location.href))){

	return (function(){
		addEventListener('message', function(event){
			if(!event.data.nid.startsWith('dmzj_get_chapters') ||
				!event.data.url ||
				(new URL(event.data.url).host != location.host)
			) return;
			var req = new XMLHttpRequest();
			req.open('GET', event.data.url, true);
			req.error = req.onload = function () {
				event.data.response = this.responseText;
				top.postMessage(event.data, event.origin);
			};
			req.send();
		});
		top.postMessage({nid: 'dmzj_get_chapters' + location.host}, '*');
	})();
}

var gUrl = (function(){
	var url = document.URL;
	if(/cartoonListUid|cartoonNewList/g.test(url)){
		return 'cartoonList';
	}else if(/^https?:\/\/manhua\.dmzj\.com\/update\_\d+\.shtml$/.test(url)){
		return 'update';
	}else if(/^https?:\/\/m\.dmzj\.com\/view\/.+\.html(\?t=\d+#\d+)?$/.test(url)){
		return 'mobile';
	}else if(/^https?:\/\/m\.dmzj\.com\/([^\/\.]+\.html)?(\?t=\d+#\d+)?$/.test(url)){
		return 'mobileHome';
	}else if(/^https?:\/\/manhua\.dmzj\.com\/.+$/.test(url)){
		return 'desktop';
	}else if(/^https?:\/\/user\.dmzj\.com\/.+$/.test(url)){
		return 'oldSubscribe';
	}else if(/^https?:\/\/i\.dmzj\.com\/\/?subscribe.*$/.test(url)){
		return 'subscribe';
	}
})();



var $$ = function(e){
	return Array.from(document.querySelectorAll(e));
};

//console.log(gUrl);


var toMobileLink = function(a){
	var a1 = a.cloneNode(true);
	a1.textContent = '(#)';
	a1.style.color = 'orange';
	a.parentNode.insertBefore(a1, a);
	a.href = a.href.replace(/\/\/manhua([^\/]+)/,'//m$1/view').replace(/shtml$/, 'html');
};

var _preventParentScrolling = function(target){
	target.addEventListener('wheel', e => {
		if(e.deltaY < 0 ?
			target.scrollTop === 0 :
			target.scrollTop === target.scrollHeight - target.clientHeight
		) e.preventDefault();
	});
};

var _cE = function (name, attr, parent){
	var e = document.createElement(name);
	attr = attr || {};
	for (var i in attr)
		i == 'text' ? (e.textContent = attr[i]) : e.setAttribute(i, attr[i]);
	parent && (Array.isArray(parent) ?
		parent[0].insertBefore(e, parent.length == 2 ? parent[1] : parent[0].firstChild) :
		parent.appendChild(e));
	return e;
};



if(gUrl == 'cartoonList'){
	$$('.acg-content-text a[href$=shtml]').forEach(toMobileLink);
}else if(gUrl == 'update'){
	$$('.pictext a[href$=shtml]').forEach(toMobileLink);
	//漫画更新页面国漫灰色显示
	var gm = [];
	$$('.pictext a[href^="http\:\/\/www\.dmzj\.com\/"]').forEach(a => {
		var boxdiv = a;
		while(boxdiv){
			if(boxdiv.className == 'boxdiv1'){
				gm.push(boxdiv);
				return boxdiv.classList.add('filter');
			}
			boxdiv = boxdiv.parentNode;
		}
	});

	//将国漫排在最后
	var boxs = $$('.newpic_bg, .newpic_bgno');

	gm.length && $$('.boxdiv1').filter(m => {
		return gm.indexOf(m) == -1;
	}).concat(gm).forEach((m, i) => {
		boxs[Math.floor(i / 4)].appendChild(m);
	});

	gm = boxs = null;

	_cE('style', {text: `
		.newpic_bg::after, .newpic_bgno::after{
			content: '';
			display: block;
			clear: both;
		}
		.boxdiv1 .picborder {
			height:auto;
		}
		.boxdiv1.filter:not(:hover) .pictext,
		.boxdiv1.filter:not(:hover) .picborder {
			filter: grayscale(100%);
		}

		.boxdiv1.filter{
			position: relative;
			overflow: hidden;
		}

		.boxdiv1.filter::after{
			content:'国漫';
			display: block;
			position: absolute;
			z-index: 1;
			color: white;
			font-size:16px;
			transform: rotate(-45deg);
			transform-origin:10px 65px;
			pointer-events: none;
			width: 100px;
			height: 50px;
			text-align: center;
			line-height: calc(100px - 1.5em);
			background: rgba(255, 165, 0, 0.7);
		}
	`}, document.head);

}else if(gUrl == 'desktop'){
	$$('.cartoon_online_border,.cartoon_online_border_other,.adiv2hidden:last-child'
		.replace(/(?=,)|$/g, ' a[title][href$=shtml]')).forEach(toMobileLink);

	//被隐藏的漫画至少显示最新话
	var mhContainer = $$('.cartoon_online_border')[0];
	if(mhContainer && mhContainer.firstElementChild.localName == 'img'){
		mhContainer.innerHTML = '<a href="' + g_comic_url + g_last_chapter_id +'.shtml" title="'+ g_last_update +'" target="_blank" style="color:orange;">(#)</a><a href="http://m.dmzj.com/view/'+ g_comic_id +'/' + g_last_chapter_id +'.html" title="'+ g_last_update +'" target="_blank">'+ g_last_update +'</a>' +'<h2>正在加载被屏蔽的地址...</h2>';

		var iframe = _cE('iframe', {style: 'display:none', src: 'http://v2.api.dmzj.com/'}, document.body);
		addEventListener('message', function(e){
			if(e.data.nid !== 'dmzj_get_chapters'+'v2.api.dmzj.com') return;
			if(!e.data.response)
				return e.source.postMessage({nid: e.data.nid, url: 'http://v2.api.dmzj.com/comic/'+ g_comic_id + '.json'}, e.origin);
			mhContainer.innerHTML = '';
			JSON.parse(e.data.response).chapters.forEach(function(chapters){
				_cE('h3', {text: chapters.title}, mhContainer);
				var ul = _cE('ul', null, mhContainer);
				chapters.data.forEach(function(c){
					_cE('li', null, ul).innerHTML = '<a href="' + c.chapter_id +'.shtml" title="'+ c.chapter_title +'" target="_blank" style="color:orange;">(#)</a><a href="http://m.dmzj.com/view/'+ g_comic_id +'/' + c.chapter_id +'.html" title="'+ c.chapter_title +'" target="_blank">'+ c.chapter_title +'</a>';
				});
				_cE('div', {class: 'clearfix'}, mhContainer);
			});
			removeEventListener('message', arguments.callee); iframe.remove();
		});

	}
}else if(gUrl == 'subscribe'){
	_cE('style', {text: `
		.dy_r p em.c_space{
			overflow:auto!important;
			width:auto!important;
			display: inline;
			white-space: normal;
		}
		.dy_r p{height:auto!important;}
	`}, document.head);
	var my_subscribe_id = $$('#my_subscribe_id')[0];
	var addObserver = function(){
		my_subscribe_id && (new MutationObserver(function(){
			$$('.c_space> a').forEach(toMobileLink);
			//未看新漫画总排前
			this.disconnect();
			$$('.c_space + .new').reverse().forEach(function(icon){
				var li = icon.parentNode.parentNode.parentNode;
				li.parentNode.insertBefore(li, li.parentNode.firstElementChild);
			});
			addObserver();
		})).observe(my_subscribe_id, {childList: true});
	};
	addObserver();
}else if(gUrl == 'oldSubscribe'){
	$$('.autoHeight p:nth-child(2)> a[href$="shtml"]').forEach(toMobileLink);
}else if(gUrl == 'mobile'){

	_cE('style', {text: `
		html, body{min-height:100vh!important; background:#222!important}
		body .UnderPage .subHeader {background-color: rgba(255, 255, 255, 0.68);}
		.UnderPage{background:#222!important}
		#commicBox{overflow:hidden}
		#commicBox>div{text-align:center; }
		#commicBox>div>img{width:80%!important;margin: 0px -3% 0px 3%;}
		#pageNum {
			position: fixed;
			top: 50px;
			background: rgba(238, 170, 0, 0.5);
			color: blanchedalmond;
			height: 1.6em;
			text-align:center;
			line-height: 1.6em;
			font-size: 2.3em;
			right: 0px;
		}

		#np_chap{
			position: fixed;
			bottom:30%;
			right: 20px;
			z-index: 11111;
		}
		#np_chap>div>div, #np_chap>a{
			cursor: pointer;
			display: block;
			background: transparent url("/images/page_bg.png") no-repeat scroll center bottom / 100% auto;
			width: 40px;
			height:40px;
			transform: rotate(90deg);
			margin-top: 5px;
			box-shadow: 0 0 6px -2px rgba(255, 255, 255, 0.65);
			border-radius: 8px;
		}
		#np_chap>div>div:not(:hover), #np_chap>a:not(:hover){
			opacity: .5;
		}
		#np_chap>div>div:last-child{
			transform: rotate(-90deg);
		}
		#np_chap>a{
			background: rgba(0, 0, 0, 0.7);
			transform:none;
			position:relative;
		}
		/*首页小房子*/
		#np_chap>a>span{
			position:absolute;
			width: 16px;
			height:8px;
			border: 1.5px solid #fff;
			border-top-width: 0;
			border-radius: 0 0 2.5px 2.5px;
			top:50%;
			left:calc(50% - 8px);
			pointer-events:none;
		}
		#np_chap>a>span::before,
		#np_chap>a>span::after{
			position:absolute;
			content: "";
			width: 15px;
			border-top: 1.5px solid #fff;
			transform: rotate(-40deg);
			top:-7px;
			left:-5px;
		}
		#np_chap>a>span::before{
			transform: rotate(40deg);
			left:auto;
			right:-5px;
		}


		#tucao{
			position: fixed;
			top: 50px;
			left: 0;
			color: #fff;
			z-index: 1111111;
			height: calc(100% - 115px);
		}
		#tucao:not(:hover){
			opacity: 0.5
		}
		#tucao ul{
			overflow-y:hidden;
			height: calc(100% - 40px);
		}
		#tucao:hover ul{
			overflow-y: scroll;
		}
		#tucao pre{
			font-weight: bold;
			margin-bottom: 5px;
		}
		#tucao li{
			margin-bottom: 5px;
			margin-left: 3px;
		}
		#tucao span{
			padding: 0px 3px;
			border-radius: 2px;
			cursor: pointer;
			border:transparent 1px solid;
		}
		#tucao span:hover{
			background-color:#FFF!important;
			color:#000;
			border-color:red;
		}

		.control_scroll{
			margin-top: 0!important;
			padding-top:0!important;
			opacity:.5;
			transition: opacity 0.3s cubic-bezier(.55,.09,.68,.53) 0s;
		}
		.control_scroll:hover{
			opacity:1;
		}
		#m_r_bottom{
			display:block!important;
			height:38px!important
		}
		#m_r_bottom>.BtnBox{
			display:none;
		}
		#m_r_slider{
			background-clip: content-box;
			padding: 14px 0px;
			top: 3px;
		}
		#m_r_slider_ball{
			top: 3px;
		}
		.control_commentIcon{
			margin-top: 9px;
		}
		/*#m_r_panelbox{display:none!important}
		#commicBox>div>img{border-top:2px solid red;margin-top:-2px;}*/

		#chapters {
			display:none;
			position: fixed;
			z-index: 100000000000;
			width: 60%;
			max-width: 400px;
			height: 80%;
			overflow-y: scroll;
			top:50%;
			left: 50%;
			transform: translate(-50%, -50%);
			background: rgba(255,255,255,.9);
			border: 5px solid rgba(0,0,0,.5);
			border-radius: 5px;
			padding: 10px;
		}
		#chapters.show{
			display:block;
		}
		#chapters ul:after{
			display: list-item;
			clear: both;
			content: '';
		}
		#chapters dt{
			border-bottom: 2px solid #ccc;
			font-size: 150%;
			text-indent: .5em;
			padding: 5px 0;
		}
		#chapters dl+dl{
			border-top: 2px solid #ccc;
		}
		#chapters li{
			float: left;
			width: 33%;
			padding: 2px 8px;
			box-sizing: border-box;
		}
		#chapters a{
			display: inline-block;
			border: 2px solid transparent;
			padding:0 5px;
			color: #000;
			max-width: 100%;
			white-space: pre;
			overflow: hidden;
			text-overflow: ellipsis;
		}
		#chapters a:hover{
			color:blue;
			border-color:blue;
		}
		#chapters a.cur{
			border-color:orange;
		}

		/*底栏*/
		.botNav{
			background-color: #222;
		}
		.letchepter{
			padding-bottom: 40px;
			background-color: #222;
			border-top-color:#000;
		}
		.letchepter .disable{
			color:#4d4d4d !important;
		}
		.letchepter .disable:hover{
			cursor:not-allowed;
		}
	`}, document.head);



	var updateMobilePage = () => {
	//去倒计时guanggao
	window['times'] = 0;
	typeof window['llt'] === 'function' && window['llt']();



	var data = $$('body script:not([src])').map(s => s.textContent.match(/mReader\.initData\((.+\})(?=,\s*(?:"|'))/)).filter(s=>s)[0];
	try{
		data = JSON.parse(data[1]);
		console.info(data.page_url.join('\n'));
	}catch(ex){
		return console.error(ex);
	}

	var np_chap = _cE('span', {id:'np_chap'}, document.body),
		np = _cE('div', null, np_chap);
		_cE('span', null, _cE('a', {title: '章节目录', href: '../../info/'+data.comic_id+'.html'}, [np_chap]));


	_cE('div', {title: '上一话', onclick: 'mReader.prevBtnAction()'}, np).style.display = data.prev_chap_id ? '' : 'none';
	_cE('div', {title: '下一话', onclick: 'mReader.nextBtnAction()'}, np).style.display = data.next_chap_id ? '' : 'none';

	$$('.beforeChapter')[0].classList.toggle('disable', !data.prev_chap_id);
	$$('.afterChapter')[0].classList.toggle('disable', !data.next_chap_id);

	_cE('script', {text: `(function(chapter_name){
		var _cE = ${_cE.toString()};
		var _preventParentScrolling = ${_preventParentScrolling.toString()};
	` + (function(){
		window.success_jsonpCallback = function(json){
			var length = json.data && json.data.list && json.data.list.length || 0;
			tucao.innerHTML = '';
			_cE('pre', {text: chapter_name+'\n'+(json.msg=='提交成功'? '' : ' '+json.msg) + (length ? ' 现有 '+ length+'/'+(json.data && json.data.total || 0)+' 吐槽:' : '')}, tucao);
			if(!length) return;
			var ul = _cE('ul', null, tucao),
				opacity = 1,
				tc = null;
			for(var i=0; i<length; i++){
				tc = json.data.list[i];
				_cE('span', {text: tc.title, title: tc.nickname+' (uid: '+tc.uid+')\nIP:'+tc.ip}, _cE('li', null, ul)).style.backgroundColor = 'rgba(39, 117, 247, '+ opacity +')';
				opacity -= 1 / (length + 1);
			}
			window.jQuery('#comment_count').show();
			_preventParentScrolling(ul);
		};
	}).toString().replace(/^[^{]+{/, '')+')(" <'+data.chapter_name+'>")'}, document.head).remove();

	var tucao = _cE('div', {id:'tucao', text: '评论加载中..'}, document.body);
	_cE('script', {src: 'http://interface.dmzj.com/api/viewpoint/getViewpoint?callback=success_jsonpCallback&more=1&type='+data.chapter_type+ '&type_id='+data.comic_id+'&chapter_id='+data.id+'&_='+ new Date().getTime()}, document.body);


	window._pageNum = _cE('div', {id:'pageNum', text: '1/'+data.sum_pages}, document.body);
	var scrollTimeout;
	var imgs = null;

	//改良原来的获取当前页码方法
	mReader.getCurrPage = function(){
		imgs = imgs || document.querySelector('#commicBox>div[id]').children;
		var ch = document.documentElement.clientHeight;
		for(var i=0;i<imgs.length;i++){
			var r = imgs[i].getBoundingClientRect();
			if(r.top <= 95 && r.bottom > 95)
				return i + 1;
		}
	};

	addEventListener('scroll', function(){
		clearTimeout(scrollTimeout);
		scrollTimeout = setTimeout(function(){
			// 页码
			!window._dragToScroll && mReader.updatePageDisplay();
			window._dragToScroll = false;
			var i = mReader.getCurrPage();
			if(i) return (_pageNum._page != i) && (_pageNum.textContent = (_pageNum._page = i)+'/'+data.sum_pages);
		}, 100);
	});

	//将eval脚本运行在页面环境,减少沙箱环境影响
	_cE('script', { text: '(' + (function(){
		//修复拖拽进度条
		var slider = document.getElementById('m_r_slider_ball'),
			sliderBar = document.getElementById('m_r_slider'),
			_isSlider = false,
			_sliderOffset = 0;
		if(slider && sliderBar){

			mReader.clickAction = eval('('+ mReader.clickAction.toString()
				.replace(/#m_r_bottom/g, '#mark')
			+').bind(mReader)');

			//拖拽滑块跳转
			addEventListener('mousemove', eval('('+ mReader.touchMoveAction.toString()
				.replace(/^.*\{/, '$&\nif(!_isSlider) return;\n')
				.replace('touches[0]', 'event')
				.replace('32 -', '_sliderOffset - ')
				.replace(/.*\}$/,'window._pageNum.textContent = this.curr_page + "/"+ this.page_num;$&')
			+').bind(mReader)'));

			slider.onmousedown = event => {
				if(event.button !== 0 || event.target !== slider) return;
				_isSlider = true;
				_sliderOffset = event.clientX - slider.offsetLeft - slider.parentNode.offsetLeft;
			};
			addEventListener('mouseup', () => {
				if(!_isSlider) return;
				_isSlider = false;
				_dragToScroll = true;
				mReader.touchEndAction();
			});

			//点击进度条位置跳转
			sliderBar.addEventListener('mousedown', eval('('+ mReader.touchMoveAction.toString()
				.replace(/^.*\{/, '$&\nif(event.button !== 0)return;\nevent.preventDefault();'
					+'\n_isSlider = true; _dragToScroll = true;\n')
				.replace('touches[0]', 'event')
				.replace('32 -', '2*')
				.replace('currX < max', 'currX <= max')
				.replace(/.*\}$/,'window._pageNum.textContent = this.curr_page + "/"+ this.page_num;$&')
			+').bind(mReader)'));
		}

		//弹出确定取消订阅窗口询问,以免误点击取消订阅。
		if(typeof window.canDY === 'function'){
			var _canDY = window.canDY;
			window.canDY = obj => {
				if(obj.classList.contains('dy_h') && !window.confirm('是否确定取消订阅?'))
					return;
				_canDY(obj);
			};
		}
	}).toString() + ')()' }, document.head).remove();


	({
		_isMousedown: false,
		_x:0, _y:0, _lx: 0, _ly: 0,
		init:function(){
			['mousedown', 'mouseup', 'mousemove'].forEach(e => document.addEventListener(e, this));
			$$('#m_r_panelbox')[0].removeAttribute('onclick');
		},
		handleEvent: function(event){
			switch(event.type){
				case 'mousedown' :
					if(event.button !== 0)
						return;
					if(event.target.id == 'm_r_panelbox'){
						event.preventDefault();
					}else{
						return;
					}
					this._isMousedown = true;
					this._x = this._lx = event.clientX;
					this._y = this._ly = event.clientY;
					break;
				case 'mouseup' :
					this._isMousedown = false;
					this._x = this._lx = this._y = this._ly = 0;
					break;
				case 'mousemove' :
					if(this._isMousedown){
						var x = event.clientX - this._x,
							y = event.clientY - this._y;
						if(Math.sqrt(x * x + y * y) > 10){
							//屏蔽漫画页怪异模式下无法获取根节点scrollTop
							var st = document.documentElement.scrollTop || document.body.scrollTop,
								dis = Math.abs(event.clientY - this._ly);
							scrollTo(0, st - (event.clientY - this._ly) * Math.min(1.8, 1 + dis * 100 / innerHeight));
							this._lx = event.clientX;
							this._ly = event.clientY;
						}
					}
					break;
			}
		}
	}).init();

	};//updateMobilePage end

	//通过屏蔽漫画页面为怪异模式判定
	if(document.compatMode === 'BackCompat' && document.body.textContent.includes('漫画内容不存在')){

		document.body.innerHTML = `
		<div id="msgContainer">
			<p>该漫画浏览器端被屏蔽,正在尝试恢复。。</p>
			<style>
				#msgContainer{
					position:absolute;
					top:0;
					left:0;
					display: flex;
					flex-direction: column;
					width:100%;
					min-height: 100vh;
					align-items: center;
					justify-content: center;
					background-color:#222;
					z-index:9999999999999999;
					opacity:1;
					transition: opacity 1s ease-in-out 1s;
				}
				#msgContainer p{
					color:#fff;
					font-size:30px;
					text-align:center;
					transition: font-size .5s linear 0s, color .2s linear 0s;
				}
				#msgContainer.removing{
					opacity:0;
				}
			</style>
		</div>
		`;
		_cE('link', {href:'/css/style.css?2015102217', type: 'text/css', rel: 'stylesheet'}, [document.head]);
		_cE('link', {href:'/css/global.css?2015111317', type: 'text/css', rel: 'stylesheet'}, [document.head]);//权重降低

		var scriptLoader = urls => {
			return Promise.all(urls.map(url => {
				return new Promise((resolve, reject) => {
					var script = _cE('script', {src: url}, document.body);
					script.onload = resolve;
					script.onerror = reject;
				});
			}));
		};
		var task = a => {
			return new Promise(resolve => {
				a(resolve);
			});
		};
		var queues = arr => {
			return Promise.all(arr.map(a => {
				if(typeof a == 'function')
					return task(a);
				return a;
			}));
		};

		var xhr = (url, callback) => {
			var n = 'dmzj_get_chapters';
			var nid = n + Math.random();
			var onMessage = e => {
				if(e.data.nid == n + new URL(url).host && !e.data.response){
					e.source.postMessage({url: url, nid: nid}, e.origin);
				}else if(e.data.nid == nid){
					removeEventListener('message', onMessage);
					callback(e);
				}
			};
			addEventListener('message', onMessage);
		};
		//shijizhiling 8785
		var pathname = location.pathname.split('/');
		var id = pathname.pop().split('.').shift();
		var comicName = pathname.pop();
		var getChapter = queues([
		   callback => {
			if(/^\d+$/.test(comicName)){
				return callback(comicName);
			}
			//获取 漫画id
			_cE('iframe', {style: 'display:none', src: 'http://manhua.dmzj.com/zt/module/'}, document.body);
			xhr('http://manhua.dmzj.com/'+ comicName + '/', callback);
		}, callback => {
			//同时加载 api iframe
			var onMessage = e => {
				if(e.data.nid == 'dmzj_get_chapters'+'v2.api.dmzj.com' && !e.data.response){
					removeEventListener('message', onMessage);
					callback(e);
				}
			};
			addEventListener('message', onMessage);
			_cE('iframe', {style: 'display:none', src: 'http://v2.api.dmzj.com/'}, document.body);
		}]).then(e => {

			var match = null;
			if(e[0].data){
				match = e[0].data &&
					e[0].data.response &&
					e[0].data.response.match(/var g_comic_id = "(\d+)";/);
				match = match[1];
			}else{
				match = e[0];
			}

			if(!match) return Promise.reject([e, match]);

			//屏蔽漫画章节id全局变量依赖
			window.subId = match;
			window.chapterId = id;

			return queues([
				'http://v2.api.dmzj.com/comic/'+ match + '.json',
				'http://v2.api.dmzj.com/chapter/'+ match + '/' + id + '.json'
			].map(url => {
				return callback => {
					//获取漫画章节目录
					var nid = 'dmzj_get_chapters' + Math.random();
					var onMessage = e => {
						if(e.data.nid == nid && e.data.response){
							removeEventListener('message', onMessage);
							callback(e);
						}
					};
					addEventListener('message', onMessage);

					e[1].source.postMessage({
						nid: nid,
						url: url
					}, e[1].origin);
				};
			}));
		});

		var _onError = e => {
			console.error(e);
			$$('#msgContainer>p')[0].appendChild(
				_cE('p', {text: '恢复失败。。', style: 'color: red;'})
			).parentNode.style.cssText = 'font-size:12px; color:#888;';
			return Promise.reject(e);
		};

		scriptLoader(['/js/jquery-1.9.1.min.js']).then(()=>{
			queues([
				getChapter,//获取章节
				scriptLoader([
					'/js/jquery.cookie.js',
					'/js/common.js',
					'/js/domain.js',
					'/js/m_reader.js?2015102416',
					'/js/TSB.js',
					'/js/main.js',
					'/js/jquery.lazyload.min.js',
				]),
			]).then(e => {
				var json;
				try{
					json = [JSON.parse(e[0][0].data.response),
						JSON.parse(e[0][1].data.response)];
				}catch(ex){
					return Promise.reject(ex);
				}
				//必须等待获取章节id全局变量依赖
				return scriptLoader(['/js/m_readerBg.js?20160720']).then(() => {
					return json;
				});
			}).catch(_onError).then(([json1, json2]) => {

				document.body.insertAdjacentHTML('afterBegin', '<div class="UnderPage"><div class="sharWin"id="read_Shar"><div class="sharClose"></div><p class="sharBar">分享到:</p><div class="sharBox"><div id="bdshare"class="bdshare_t bds_tools"><a class="bds_tsina sina"style=""></a><a class="bds_tqq tqq"></a><a class="bds_qzone zone"></a></div></div></div><section id="currentCache"><div class="view-imgBox"id="m_r_imgbox_0"><div class="mh_box"><div id="commicBox"></div><div class="botNav"><div class="botNav_box"><a class="tc"href="/viewpoint/40065/68253.html"><span>吐槽<em>0</em></span></a><a class="dy"onclick="canDY(this)"id="dys"href="javascript:void(0);"><span>订阅</span></a><a class="fx"onclick="sharwindow()"><span>分享</span></a></div></div><div class="letchepter"><a href="javascript:void(0);"onclick="$(\'#loadPrevChapter\').click()"class="beforeChapter">&lt;上一章</a><em>/</em><a href="" class="ChapterLestMune">返回目录</a><em>/</em><a href="javascript:void(0);"onclick="$(\'#loadNextChapter\').click()"class="afterChapter">下一章&gt;</a></div></div></div></section><div class="subHeader"style="display: none; z-index: 999999999999999999;"id="m_r_title"><a href="javascript:"class="iconRet"onclick="mReader.returnBtn()"></a><a href="javascript:;"class="BarTit"></a><a href="javascript:"class="iconShar"onClick="sharwindow()"></a></div><div class="control_bottom"style="display: none; z-index: 999999999999999999;"id="m_r_bottom"><div class="BtnBox"><div class="load_box next"id="loadNextChapter"onclick="mReader.nextBtnAction()"></div><div class="load_box prev"id="loadPrevChapter"onclick="mReader.prevBtnAction()"></div><div class="page_left"id="m_r_nums"><span>1</span>/1</div></div><div class="control_scroll"><a href=""class="control_commentIcon"><em id="comment_count"></em></a><div class="scroll_left_Box"><div class="scroll_box"id="m_r_slider"><div class="scroll_barX"></div><div class="scroll_bar"id="m_r_slider_ball"ontouchmove="mReader.touchMoveAction(event)"ontouchend="mReader.touchEndAction(event)"></div></div></div></div></div><div class="control_panel alpha"style=" display:block"id="m_r_panelbox"prompt="true"onclick="mReader.clickAction(event)"><div class="mark"style="display: none;"id="mark"></div></div></div>');


				var chapters = json1.chapters.map(d => {
					return d.data.find(cid => cid.chapter_id == id);
				});
				var cindex = chapters.findIndex(c => c);
				var chapter = chapters[cindex];
				var index = json1.chapters[cindex].data.indexOf(chapter);
				var data = {
					id: id,
					comic_id: json1.id,
					chapter_name: chapter.chapter_title,
					chapter_order: chapter.chapter_order,
					createtime: chapter.updatetime,
					page_url: json2.page_url,
					chapter_type:0,
					chapter_num:chapter.chapter_order,
					sum_pages:json2.picnum,
					direction:json2.direction,
					filesize:chapter.filesize,
					picnum:json2.picnum,
					hit:json1.hit_num,
					prev_chap_id: json1.chapters[cindex].data[index + 1].chapter_id,
					comment_count:json2.comment_count
				};
				document.title = json1.title + ' - ' + chapter.chapter_title;
				if(index > 0){
					data['next_chap_id'] = json1.chapters[cindex].data[index - 1].chapter_id;
				}

				_cE('script', null, [document.body]).textContent = `
					mReader.initData(${JSON.stringify(data)}, "${json1.title}", "${json1.cover}");
				`;
				updateMobilePage();

				var div = _cE('div', {id: 'chapters'});
				div.innerHTML = '<dl>' + json1.chapters.map((d, i) => {
					return d.data.map((c, j) => {
						return `<li><a ${i == cindex && j == index ? 'class="cur" ' : ''}href="/view/${json1.id}/${c.chapter_id}.html" title="${c.chapter_title}">${c.chapter_title}</a></li>`;
					}).join('');
				}).map((c, i) => {
					return `<dt>${json1.chapters[i].title}</dt>
						<dd><ul>${c}</ul></dd>`;
				}).join('') + '</dl>';

				_preventParentScrolling(div);

				$$('.control_commentIcon')[0].href = `/viewpoint/${data.comic_id}/${data.id}.html`;
				$$('.BarTit')[0].textContent = chapter.chapter_title;
				//没有触发resize、scroll事件无法显示第一张图片
				window.jQuery(window).trigger('scroll');

				var msg = $$('#msgContainer>p')[0];
				if(msg){
					msg.appendChild(_cE('p', {text: '恢复成功!!', style: 'color: green;'}));
					msg.style.cssText = 'font-size:12px; color:#888;';
					var msgContainer = msg.parentNode;
					msgContainer.addEventListener('transitionend', event => {
						if(event.propertyName === 'color' && event.target === msg){
							msgContainer.classList.add('removing');
						}else if(event.propertyName === 'opacity' && event.target === msgContainer){
							msgContainer.remove();
						}
					});
				}

				var btn = $$('#np_chap>a')[0];
				var backLink = $$('.ChapterLestMune')[0];
				backLink.href = btn.href;
				document.body.appendChild(div);
				document.addEventListener('click', event=>{
					if(event.button === 0 && (event.target === btn || event.target === backLink)){
						div.classList.toggle('show');
						return event.preventDefault();
					}
					if(div.contains(event.target))
						return;
					div.classList.remove('show');
				});
			});
		}).catch(_onError);
	}else{
		updateMobilePage();
	}


}else if('mobileHome'== gUrl){
	_cE('style', {text: `
		.imgBox [class^='col_3_'] li{
			width: 10%!important;
			min-width: 120px;
			margin: 0px 0% 0% 3%!important;
		}
		.imgBox [class^='col_2'] li{
			width: 18%!important;
			min-width: 200px;
		}
		.imgBox [class^='col_3_'] li img{
			height: auto!important;
		}
		.imgBox [class^='col_3_'] li:nth-child(7n+1){
			clear:left;
		}
	`}, document.head);
}

})();