Greasy Fork

Greasy Fork is available in English.

DMZJ漫画转为手机版链接

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

当前为 2017-09-28 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name        DMZJ漫画转为手机版链接
// @author      Crab
// @namespace   [email protected]
// @description DMZJ漫画更新页面链接转为手机版
// @include     /https?:\/\/([^/]+?\.dmzj\.com\/|(?:i\.178\.com\/~sms\.cartoon\.cartoon(?:ListUid|NewList))).*/
// @compatible  firefox 34+
// @compatible  Chrome 45+
// @version     0.9.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.onerror = 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 rules = {
		update: /^https?:\/\/manhua\.dmzj\.com\/update\_\d+\.shtml$/,
		mobile: /^https?:\/\/m\.dmzj\.com\/view\/.+\.html([@?#&].+)?$/,
		mobileHome: /^https?:\/\/m\.dmzj\.com\/([^\/\.]+\.html)?(\?t=\d+#\d+)?$/,
		desktop: /^https?:\/\/manhua\.dmzj\.com\/.*$/,
		subscribe: /^https?:\/\/i\.dmzj\.com\/\/?subscribe.*$/,
		//record: /^https?:\/\/i\.dmzj\.com\/\/?record.*$/,
		//cartoonList: /cartoonListUid|cartoonNewList/g,
		//oldSubscribe: /^https?:\/\/user\.dmzj\.com\/.+$/,
	};
	var url = location.href;
	for(var i in rules){
		if(rules[i].test(url)){
			rules = null;
			if(i === 'desktop' && location.pathname === '/')
				return 'deskHome';
			return i;
		}
	}
})();



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

//console.log(gUrl);


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;
};

//动态转换链接
_cE('style', {text: `
	@keyframes toMobileLink {from{opacity:.9}to{opacity:1}}
	.acg-content-text a[href$=shtml]:not([mbl])/*cartoonList*/
	,.pictext a[href$=shtml]:not([mbl])/*update*/
	,${'.cartoon_online_border,.cartoon_online_border_other, .adiv2hidden:last-child'
		.replace(/(?=,)|$/g, ' a[title][href$=shtml]:not([mbl])')}/*desktop*/
	,.c_space> a:not([mbl]) /*subscribe*/
	,#type_comics .adivhidden:last-child a[href$="shtml"]:not([mbl])/*subscribe 边栏*/
	,.autoHeight p:nth-child(2)> a[href$="shtml"]:not([mbl]) /*oldSubscribe*/
	,.tcaricature_block .adiv2hidden:last-child a[href$="shtml"]:not([mbl]),
		.read_mend_mr a[href$="shtml"]:not([mbl]),
		.icn-02_indexa[href$="shtml"]:not([mbl])/*deskHome*/
	,.history_des a[href*="shtml"]:not([mbl])/*record*/
	,.zxgxbox a[href$="shtml"]:not([mbl])/*tags 边栏*/
	,#bookOpen .book_num:not([mbl])/*顶部弹出面板*/
	,.middleright-right a[href$="shtml"]:not([mbl])/*排行榜页面*/
	{animation:toMobileLink 1ms}

	a[mbl][style]{width:20px!important}
	/*首页*/
	.icn-02_index a{padding-left:0!important}
	.top_list span{width:15px}
	.top_list a {width:140px}
	.top_list .num{margin-right:-5px!important}
	/*tags 边栏*/
	.zxgxbox .tt_chapter{margin-left: 0px}
	.zxgxbox .numbig{padding:0}
	.zxgxbox .tt_comic {width: 74px}
	.book_l{margin-left:-20px!important}
	/*排行榜页面*/
	.middleright-right .bikini li>a{padding:0!important}
	.middleright-right .bikini li>a+a{width:110px!important}
`}, document.head);
addEventListener('animationstart', e => {
	if(e.animationName !== 'toMobileLink')
		return;
	var a = e.target;
	if(!/\/\/manhua\./.test(a.href)) return;
	a.setAttribute('mbl', 1);
	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');
});

if(gUrl == 'update'){
	//漫画更新页面国漫灰色显示
	var gm = [];
	$$('a.pictextst[href^="http\:\/\/www\.dmzj\.com\/"]').forEach(a => {
		var boxdiv = a.closest('.boxdiv1');
		if(boxdiv){
			gm.push(boxdiv);
			boxdiv.classList.add('filter');
		}
	});

	//将国漫排在最后
	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'){

	//被隐藏的漫画至少显示最新话
	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">'+ 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 = '';
			var isFolderURL = location.pathname.endsWith('/');
			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="'+ (isFolderURL ? '' : g_comic_url) + c.chapter_id +'.shtml" 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(){
			//未看新漫画总排前
			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 == '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;
			max-height: calc(100% - 150px);
			height: auto;
			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][1];

	_cE('script', {text: `(function(data){
		var _cE = ${_cE.toString()};
		var _preventParentScrolling = ${_preventParentScrolling.toString()};
	` + (function(){
		var tucao = _cE('div', {id:'tucao', text: '评论加载中..'}, document.body);
		window.success_jsonpCallback = function(json){
			var length = json.data && json.data.list && json.data.list.length || 0;
			tucao.innerHTML = '';
			_cE('pre', {text: ' <' + data.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);
		};

		_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).onload = function(){
			this.remove();
			window.success_jsonpCallback = null;
		};
	}).toString().replace(/^[^{]+{/, '') + `)(${data})`}, document.head).remove();

	try{
		data = JSON.parse(data);
		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);



	//将eval脚本运行在页面环境,减少沙箱环境影响
	_cE('script', { text:  `(function(sum_pages){
		var _cE = ${_cE.toString()};
	` +  (function(){

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

		//改良原来的获取当前页码方法
		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;
			}
		};

		var scrollTimeout;
		var updatePager = function(){
			// 页码
			!_dragToScroll && mReader.updatePageDisplay();
			var i = mReader.getCurrPage();
			if(i) return (_pageNum._page != i) && (_pageNum.textContent = (_pageNum._page = i) + '/' + sum_pages);
		};
		addEventListener('scroll', function(){
			cancelAnimationFrame(scrollTimeout);
			scrollTimeout = requestAnimationFrame(updatePager);
		});

		//修复拖拽进度条
		var slider = document.getElementById('m_r_slider_ball'),
			sliderBar = document.getElementById('m_r_slider'),
			_isSlider = false,
			_sliderOffset = 0,
			_dragToScroll = false;
		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(/.*\}$/,'_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(/.*\}$/,'_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().replace(/^[^{]+{/, '') + `)(${data.sum_pages})`}, 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)
						break;
					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' && /漫画(内容)?不存在/.test(document.body.textContent)){

		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;
				}
			</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 => Promise.all(urls.map(url => new Promise((resolve, reject) => {
			var script = _cE('script', {src: url}, document.body);
			script.onload = resolve;
			script.onerror = reject;
		})));

		var queues = arr => Promise.all(arr.map(a => typeof a === 'function' ? new Promise(a) : 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 chapterId = pathname.pop().split('.').shift();
		var comicName = pathname.pop();
		var v2Iframe = null;
		var getChapter = queues([
		   callback => {
		   	//地址栏漫画id是数字
			if(/^\d+$/.test(comicName)){
				return callback(comicName);
			}
			//抓取pc端页面数据获取数字id
			var iframe = _cE('iframe', {style: 'display:none', src: 'http://manhua.dmzj.com/zt/module/'}, document.body);
			xhr('http://manhua.dmzj.com/'+ comicName + '/', e => {
				iframe.remove();
				iframe = null;
				var match = e.data.response &&
					e.data.response.match(/var g_comic_id = "(\d+)";/);
				callback(match ? match[1] : Promise.reject(new Error('该漫画真的不存在或可能已被删除')));
			});
		}, 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);
			v2Iframe = _cE('iframe', {style: 'display:none', src: 'http://v2.api.dmzj.com/'}, document.body);
		}]).then(e => {

			var subId = e[0];

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

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

			return queues([
				'http://v2.api.dmzj.com/comic/'+ subId + '.json',
				'http://v2.api.dmzj.com/chapter/'+ subId + '/' + chapterId + '.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);
				};
			}));
		});


		scriptLoader(['/js/jquery-1.9.1.min.js']).then(() => {
			return 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 => {
			v2Iframe.remove();
			v2Iframe = null;
			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;
			});
		}).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=""><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 => d.data.find(cid => cid.chapter_id == chapterId));
			var cindex = chapters.findIndex(c => c);
			var chapter = chapters[cindex];
			var index = json1.chapters[cindex].data.indexOf(chapter);
			var data = {
				id: chapterId,
				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,
				comment_count:json2.comment_count
			};
			if(json1.chapters[cindex].data.length > index + 1)
				data.prev_chap_id = json1.chapters[cindex].data[index + 1].chapter_id;
			if(index > 0)
				data.next_chap_id = json1.chapters[cindex].data[index - 1].chapter_id;


			document.title = json1.title + ' - ' + chapter.chapter_title;
			_cE('script', {text:`mReader.initData(${JSON.stringify(data)}, "${json1.title}", "${json1.cover}");`}, [document.body]);
			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);

			//修复分享按钮
			_cE('script', {id: 'bdshare_js', data: 'type=tools&mini=1'}, document.body);
			_cE('script', {id: 'bdshell_js', src: 'https://static.dmzj.com/baidushare/static/js/shell_v2.js?cdnversion=' + Math.ceil(new Date()/3600000)}, document.body);
			//修复吐槽链接
			$$('.tc')[0].href = $$('.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){
				_cE('p', {text: '恢复成功!!', style: 'color: green;'}, msg);
				msg.style.cssText = 'font-size:12px; color:#888;';
				var msgContainer = msg.parentNode;
				msgContainer.addEventListener('transitionend', event => {
					if(event.propertyName === 'color' && event.target === msg){
						msgContainer.style.opacity = 0;
					}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(e => {
			console.error(e);
			$$('#msgContainer>p')[0].appendChild(
				_cE('p', {text: '恢复失败。。', style: 'color: red;'})
			).parentNode.style.cssText = 'font-size:12px; color:#888;';
		});
	}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);
}

})();