// ==UserScript== // @name 微博图片全显示 // @namespace hzhbest // @include http://weibo.com/* // @include http://www.weibo.com/* // @description 同屏显示多图微博的全部大图。 // @version 2.1 // @grant GM_xmlhttpRequest // @grant unsafeWindow // @downloadURL none // ==/UserScript== (function() { var topheight = 10; // 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}\??/; // window.addEventListener('load', function(){if (regex.test(document.location.href)) {setTimeout(init, 3000);}}, false); if (regex.test(document.location.href)) init(); //console.log(regex.test(document.location.href)); function init(){ //console.log("init"); var list_ul = getElementsByClass("list_ul", 'div')[0]; //alert(!list_ul + "1"); var expbox = getElementsByClass("WB_expand_media_box", 'div')[0]; //alert(!expbox + "2"); if (!list_ul && !expbox){ //未加载评论框架,等候 setTimeout(init, 2000); //console.log("wait2a"); return; } else if (!!list_ul){ if (!expbox) { //console.log("exit"); //没有附加媒体容器,退出 return; } else if (!list_ul.getElementsByTagName('div')[0] && !getElementsByClass("tips_rederror", 'div')[0]){ //未加载评论内容框架,等候 setTimeout(init, 1000); //console.log("wait2b"); return; } else if (document.documentElement.scrollTop < (topheight+70)){ //页面未滚动,等候 setTimeout(init, 300); //console.log("wait2c"); return; } else { //console.log(document.documentElement.scrollTop); go(); } } } function go(){ var wrpbox = getElem('//div[@node-type="feed_list_media_prev"]/div[@class="WB_media_wrap clearfix"]'); //附加媒体容器 var expbox = getElementsByClass("WB_expand_media_box", 'div')[0]; //扩展媒体容器 var feedbox = getElementsByClass("WB_feed_handle", 'div')[0]; //评论区分解元素 var appbox = getElementsByClass("WB_app_view", 'div')[0]; //应用容器 var longtext = document.getElementById("plc_main").querySelectorAll('[action-type="fl_unfold"]')[0]; //可展开的按钮 var maintextimg = getElem('//div[@class="WB_detail"]/div[@class="WB_text W_f14"]/a[@action-type="widget_photoview"]'); //正文中的图片 var box = wrpbox.parentNode; //装载提取内容的容器 var imgthumbs = wrpbox.getElementsByTagName('img'); //提取其中的图片 var imgsrc = [], imgs = [], imgl = imgthumbs.length; 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: 560px;} .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: 520px;} .media_box{display: none !important;} div[node-type="comment_list"] .media_box{display: block !important;} .big_pic_sc,.big_pic_nc{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: 40%;} .big_pic_nc{top: 45%;}'; var sclink = creaElemIn('div', document.body); //直达评论链接 sclink.className = "big_pic_sc"; sclink.innerHTML = "直达评论"; sclink.addEventListener("click", function(){ document.documentElement.scrollTop = getTop(feedbox); }, false); if (!!appbox) { //检测到应用容器(微博文章或视频)时退出 box.appendChild(appbox); if (!!wrpbox) box.removeChild(wrpbox); if (!!expbox) expbox.parentNode.removeChild(expbox); document.documentElement.scrollTop = topheight; 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: 40%;}'; return; } if (!!longtext) { //检测到超长微博可展开的按钮,自动展开 getlongtext(longtext); } if (!!maintextimg) { //检测到有正文转发含有图片,自动展开 maintextimg.innerHTML = ""; maintextimg.parentNode.insertBefore(document.createElement("br"), maintextimg); var mtimg = creaElemIn("img", maintextimg); mtimg.src = maintextimg.getAttribute("imagecard").replace("pid=", "http://ww1.sinaimg.cn/bmiddle/") + ".jpg"; } var j = 0; for (var i = 0; i < imgl; i++) { //console.log(j,imgthumbs[i].src); //提取大图 if (/sinaimg.cn\/(orj|thumb)\d{3}/.test(imgthumbs[i].src)) { // http://ww3.sinaimg.cn/thumb180/005CeWgjjw1f28f73p6imj30cs07ot96.jpg imgsrc[i] = imgthumbs[i].src.replace(/sinaimg.cn\/(orj|thumb)\d{3}/, "sinaimg.cn/large"); } else { j += 1; //console.log(j,imgl,j == imgl); continue; } if (j == imgl) return; imgs[i] = creaElemIn('img', box); creaElemIn('br', box); 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: 40%;}'; return; } // console.log(!!wrpbox + "1 " + !!expbox + "2"); if (!!wrpbox) box.removeChild(wrpbox); if (!!expbox) expbox.parentNode.removeChild(expbox); document.documentElement.scrollTop = topheight; 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); } // Create an element function creaElemIn(tagname, destin) { var theElem = destin.appendChild(document.createElement(tagname)); return theElem; } // Get the first element by xpath function getElem(xpath) { return document.evaluate(xpath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0); } // Get elements by classname function getElementsByClass(cName ,tagName){ var elements = tagName ? document.getElementsByTagName(tagName) : document.getElementsByTagName('*'); var findEles = []; var reg = new RegExp('^'+cName+'\\s*|\\s+'+cName+'\\s+|\\s+'+cName+'$'); for(var i=0;i