// ==UserScript== // @name 微博图片全显示 // @namespace hzhbest // @include http://weibo.com/* // @include https://weibo.com/* // @include http://www.weibo.com/* // @include https://www.weibo.com/* // @description 同屏显示多图微博的全部大图。 // @version 3.91 // @grant GM_xmlhttpRequest // @grant unsafeWindow // @run-at document-end // @license GNU GPLv3 // @downloadURL none // ==/UserScript== (function() { // --这里是设置区-- // var topheight = 60; //微博顶栏高度 var topspare = 100; //滚动预留顶部高度 var autorefresh = true; //是否定时自动检测页面变化 // --以下是代码区,请不要随意改动-- // // http://weibo.com/2710065263/BmxiVDCgt?from=page_1005052710065263_profile&wvr=6&mod=weibotime&type=comment#_rnd1436436058420 // http://weibo.com/2328516855/CnYCvixUq?type=comment#_rnd1436493435761 var regex = /weibo\.com\/\d{10}\/[a-z0-9A-Z]{9}\??/; pinit(); function pinit(){ console.log(document.location.href); if (regex.test(document.location.href)) { var bpimg = getElementsByClass("big_pic", 'img')[0]; if (!bpimg) {init();} } if (autorefresh){ setTimeout(pinit, 1000);console.log("wait 1 sec"); } } function init(){ var list_ul = getElementsByClass("vue-recycle-scroller__item-view", 'div')[0]; //评论框架 var expbox = getElementsByLClass("content_row_-", 'div')[0]; //附加媒体容器 if (!list_ul && !expbox){ //console.log("no1");//未加载评论框架,等候 setTimeout(init, 1000); return; } else if (!!list_ul && !expbox) { //console.log("no2");//评论框架已加载却无附加媒体容器,退出 //getlongtext() return; } else {//console.log("go"); //getlongtext() go(); } } function go(){ var expbox = getElementsByLClass("content_row_-", 'div')[0]; //附加媒体容器 var wrpbox = expbox.firstElementChild; var feedbox = getElementsByClass("vue-recycle-scroller__item-wrapper", 'div')[0]; //评论区容器元素 var appbox = getElementsByClass("WB_app_view", 'div')[0]; //应用容器?? var videobox = expbox.getElementsByTagName('video')[0]; //视频容器 var maintextimg = getElem('//div[@class="WB_detail"]/div[@class="WB_text W_f14"]/a[@imagecard]'); //正文中的图片?? var dbox = document.body.getElementsByTagName('main')[0].parentNode.parentNode; //主容器 dbox.style.maxWidth = "none"; var imgthumbs = expbox.getElementsByTagName('img'); //提取其中的图片 var imgsrc = [], imgs = [], imgl = imgthumbs.length, mtimg; var _limited = false; //console.log(maintextimg.attributes[0]); // Insert CSS var headID = document.getElementsByTagName("head")[0]; var cssNode = creaElemIn('style', headID); cssNode.type = 'text/css'; cssNode.innerHTML = '.big_pic{max-width: 890px;} .big_pic_n{max-width: 500px;} '; //大图样式 cssNode.innerHTML += [ 'main>div {width: auto !important;}', '.WB_frame_c {width: auto !important; max-width: 920px; min-width: 600px;}', '.WB_text.W_f14, .repeat_list .list_box .WB_text, .WB_expand>.WB_text{width: 490px;}', '.WB_frame_c .media_box{display: none !important;}', 'div[node-type="comment_list"] .media_box{display: block !important;}', 'div[id^="Pl_Core_RecommendFeed__"]{right: 150px; width: 100px !important; max-height: 35px; overflow: hidden; transition: all ease 0.2s 0.5s;}', 'div[id^="Pl_Core_RecommendFeed__"]:hover{width: 300px !important; max-height: 1000px;}', 'div[id^="Pl_Core_RecommendFeed__"] .opt_box{display:none;}', 'div[id^="Pl_Core_RecommendFeed__"]:hover .opt_box{display: inline-block;}'].join(); //微博自身框架样式 cssNode.innerHTML += [ '.big_pic_sc,.big_pic_nc,.big_pic_1c,.big_pic_2c,.big_pic_3c{position: fixed; left:10px; height: 20px; padding: 3px; border: 1px solid white; color: white; background: rgba(133,133,133,0.6); cursor: pointer;}', '.big_pic_sc{top: 430px} ', '.big_pic_nc{top: 500px;} ', '.big_pic_1c{top: 300px;} ', '.big_pic_2c{top: 340px;} ', '.big_pic_3c{top: 380px;}'].join(""); //按钮样式 var sclink = creaElemIn('div', document.body); //直达评论链接 sclink.className = "big_pic_sc"; sclink.innerHTML = "直达评论"; sclink.addEventListener("click", function(){ commentbox = getElementsByClass("wbpro-tab3", 'div')[0]; scrollto(getTop(commentbox) - topheight * 2); }, false); if (!!videobox) { cssNode.innerHTML = [ '.big_pic_sc{position: fixed; left:10px; padding: 3px; border: 1px solid white; color: white; background: rgba(133,133,133,0.6); cursor: pointer;} ', '.big_pic_sc{top: 430px}'].join(""); return; } if (!!appbox) { //检测到应用容器(微博文章或视频)时退出 box.appendChild(appbox); if (!!wrpbox) expbox.removeChild(wrpbox); cssNode.innerHTML = [ '.media_box{display: none !important;}', '.big_pic_sc{position: fixed; left:10px; padding: 3px; border: 1px solid white; color: white; background: rgba(133,133,133,0.6); cursor: pointer;} ', '.big_pic_sc{top: 430px}'].join(""); return; } if (!!maintextimg) { //检测到有正文转发含有图片,自动展开 maintextimg.innerHTML = ""; maintextimg.parentNode.insertBefore(document.createElement("br"), maintextimg); mtimg = creaElemIn("img", maintextimg); mtimg.src = maintextimg.getAttribute("imagecard").replace("pid=", "http://ww1.sinaimg.cn/bmiddle/") + ".jpg"; mtimg.className = "big_pic"; } var j = 0; for (var i = 0; i < imgl; i++) { console.log(j,imgthumbs[i].src); //提取大图 // https://wx2.sinaimg.cn/orj360/006QkcF9ly1gz75df9qmuj30nn061dj1.jpg // https://wx2.sinaimg.cn/large/006QkcF9ly1gz75df9qmuj30nn061dj1.jpg // https://wx4.sinaimg.cn/large/002MwiQagy1gz7le15xtyj60k06851kx02.jpg if (/sinaimg.c(om|n)\/(orj|thumb)\d{3}/.test(imgthumbs[i].src)) { imgsrc[i] = imgthumbs[i].src.replace(/(sinaimg\.c(om|n)\/)(orj|thumb)\d{3}/, "$1large"); } else if (/sinaimg.c(om|n)\/large/.test(imgthumbs[i].src)) { imgsrc[i] = imgthumbs[i].src } else { j += 1; console.log(j,imgl,j == imgl); continue; }console.log(j,imgl); if (j == imgl) return; imgs[i] = creaElemIn('img', expbox); creaElemIn('br', expbox); imgs[i].src = imgsrc[i]; imgs[i].className = "big_pic"; } if (j == imgl) { //没找到符合条件的大图,退出 cssNode.innerHTML = '.big_pic_sc{position: fixed; left:10px; padding: 3px; border: 1px solid white; color: white; background: rgba(133,133,133,0.6); cursor: pointer;} .big_pic_sc{top: 430px}'; return; } imgl = imgs.length; if (!!mtimg) imgl = imgs.unshift(mtimg); //console.log(imgs.length); // console.log(!!wrpbox + "1 " + !!expbox + "2"); if (!!wrpbox) expbox.removeChild(wrpbox); var nclink = creaElemIn('div', document.body); //图片限宽链接 nclink.className = "big_pic_nc"; nclink.innerHTML = "图片限宽"; nclink.addEventListener("click", function(){ if (_limited) { for (var i = 0; i < imgl; i++) {imgs[i].className = "big_pic";} _limited = false; } else { for (var i = 0; i < imgl; i++) {imgs[i].className = "big_pic_n";} _limited = true; } }, false); var n1link = creaElemIn('div', document.body); //首个图片链接 n1link.className = "big_pic_1c"; n1link.innerHTML = "△首个图片"; n1link.addEventListener("click", function(){ scrollto(getTop(imgs[0])-topspare); }, false); var n2link = creaElemIn('div', document.body); //上个图片链接 n2link.className = "big_pic_2c"; n2link.innerHTML = "▲上个图片"; n2link.addEventListener("click", function(){ var t = document.documentElement.scrollTop; console.log("t:"+t); for (var j=imgl-1; j>=0; j--) { console.log(j,getTop(imgs[j]),getTop(imgs[j]) + imgs[j].height - topspare); if (t > getTop(imgs[j]) + imgs[j].height - topspare) { scrollto(getTop(imgs[j]) - topspare); n2link.innerHTML = "▲上个图片[" + (j+1) + " / " + imgl + "]"; return; } } }, false); var n3link = creaElemIn('div', document.body); //下个图片链接 n3link.className = "big_pic_3c"; n3link.innerHTML = "▼下个图片"; n3link.addEventListener("click", function(){ var t = document.documentElement.scrollTop; console.log("t:"+t); for (var j=0; j