阅读:7359回复:4
油猴腳本:豆瓣助手(douban helper)的猫腻
安装豆瓣助手脚本之后,浏览淘宝商品链接都会通过j.juandou.com跳转,变成作者的淘宝客链接,并且会有很大部分商品页面无法到达,自动跳转到淘宝首页~~
|
|
1楼#
发布于:2011-02-26 17:49
代码中无发现 juandou链接啊
// ==UserScript== // @name 豆瓣助手 douban helper // @namespace http://userscripts.org/scripts/show/49911 // @description 为豆瓣(<!-- w --><a class="postlink" href="http://www.douban.com">www.douban.com</a><!-- w -->)添加各种人性化的功能。 // @require http://js-addon.googlecode.com/files/au ... per.js?t=8 // @include * // @version 5.01 /* @reason (V5.01紧急修正:直播模式的BUG) 再一次,改变一切! 增加:相册增强!高阶相册浏览模式(含自动播放) 增加:相册在当前页面加载下一页 修正:修复相册缩略图无法拖拽打开新标签的BUG 修正:豆瓣日记楼主工具条错位的BUG 优化:讨论增强细分已注销用户的识别 优化:增加识别多个音乐播放表,提供所有音乐链接 优化:识别电影剧照全尺寸大图 提示:(不用快捷键的同学可以无视下文) 相册浏览模式切图快捷键与默认的翻页快捷键冲突 同学们最好改一下豆瓣助手的翻页快捷键,按 Alt+Q 可以修改 @end*/ // ==/UserScript== /* ************************ 备注 ************************ */ /** * 看到这的同学,如果希望帮助完善豆瓣助手,请在豆瓣插件小组回复: http://www.douban.com/group/topic/6604219/ * 如果是看到某些代码还合眼,直接使用就可以了,欢迎感谢我:-) * * ====== 未来计划: ====== * 小组、友邻等加载下一页 * 加载下一页增加动画 * 楼层数纠正 * 置顶小组导航条 修复 * 浮动输入框更便捷的关闭方式 * 阿尔法城检测是否可入住 * 友邻工具 应用到小组讨论等版面 * ctrl + enter 改进用于发邮件和发主题 * chrome版我说 * 自动加载下一页 * 任何页面发表我说 * 缩略图悬浮显示大图 * * 豆瓣“我的推荐”太杂乱了,有分类功能吗 有些推荐只想作为个人的收藏能否隐藏呢?? * 增加卓越当当在线试读搜索或侧栏提示 * 话题更新提醒 * 自定义关键字的小组话题提醒 * 当话题有新回复时弹出提醒 * 日记可否像相册一样加载所有分页,并且缩短为只显示标题 * 广播小图预览,跟新浪微博看图片那个放大镜的功能。 * 相册大图用于豆瓣社区友邻等等 * 剧照、海报外层就可显示大图 * 双击标题回复、双击内容引用 * 添加过滤广播功能 * 预读下一页、无刷新看直播 * 刷新、翻页后仍保留 高亮/忽略 * 默认高亮楼主 * 高亮引用文字 * 友邻备注 * 关注某人(自动高亮名字或提醒有新发言) * 小组增强按钮 改用全局单一事件捆绑 并不再使用name 改用class * * 自动电梯美化 * 将小组图标在两分类中来回移动会导致消失或分类失效 * 小组可拖离分区(or dbclick?) * 分区可折叠 * 输入框输入页码跳转 * 翻页附加到浮动工具 开放DIY,可定义快捷键对应页面 * 中英文区分搜索 * 鼠标置于相册回复上方自动显示回复内容 * 推荐到豆瓣 * 可关闭更新提醒 * 右上角的提醒和邀请 * 楼主引用回复 * 搜索引擎改为全部自定义 * 建立自定义快捷键哈希表,如有一致就执行 * 检测是否已加入该小组 */ /* ************************ 判断执行 ************************ */ //自动更新 GM_getValue('supportHelper', true) || (unsafeWindow.__done__ = true); typeof(Updater)!='undefined' && new Updater({name: '豆瓣助手 douban helper',id: '49911',version: '5.01'}).check(); // var Douban = /[^9]+\.douban\.com$/i.test(location.hostname); var Douban = /\.douban\.com/i.test(location.href); var runHelper = function(){ autoElevator();//自动电梯 exBoard();// 留言板增强 exGroup();//交流增强 albBig(); //相册增强 friendsTool();//友邻工具条 // addPageLoader();//页面加载控件 }; if(self.location == top.location && Douban){ var t1 = new Date();//时间1 hl_input(); //输入框高亮 addSearchBar(); //添加搜索条 hideMSG();//隐藏小组介绍 settingBar();//添加豆瓣助手设置按钮 addTopPager();//置顶翻页导航条 runHelper();//需重复运行的部分 musicLink();//破解音乐人下载链接 ctrlEnter();//快速回复 slideBar();//顶部滑动导航条 multiSearch();//全站搜索 sortGroup();//小组分类 settle();//浮动定位工具 addHotKey(GM_getValue('hk_db', 'alt+Q'),function(){sw_set(false)});//添加快捷键 $('#db_hp').title = '用时:' + (new Date() - t1)/1000 + ' 秒';//记录豆瓣助手耗时 }else{ parent && parent.document.getElementById('fulliframe') && (top.location = self.location);// 对付ISP广告 }; !Douban && openDouban();//秘籍 '↑↑↓↓←→←→' 打开豆瓣 showPic(); //显示链接图片 /* ************************ 基本函数准备 ************************ */ // 获取URL参数 function QueryString(item){ var sValue=location.search.match(new RegExp('[\?\&]'+item+'=([^\&]*)','i')); return (sValue && sValue[1]!= '')?sValue[1]:0; }; // 获取Cookie function getCookie(c_name){ if (document.cookie.length > 0){ c_start = document.cookie.indexOf(c_name + '='); if (c_start!=-1){ c_start = c_start + c_name.length + 1; c_end = document.cookie.indexOf(';',c_start); if (c_end == -1){ c_end = document.cookie.length;} return unescape(document.cookie.substring(c_start,c_end)); } } return ''; }; // 自造 selector function $$(w){ return document.querySelectorAll(w); }; function $(select){ var name = select.substring(1); switch(select.charAt(0)){ case '#': return document.getElementById(name); case '.': return document.getElementsByClassName(name); case '/': return document.getElementsByTagName(name); default: return document.getElementsByName(select); } }; // 赋予多个对象统一样式 function setStyles(obj, css){ for (var o=obj,i=0,j=o.length; i<j; i++){ o.style.cssText = css; } }; // Xpath function xpath(query, context){ return document.evaluate(context?(query.indexOf('.')==0?query:'.' + query):query, context || document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); }; // base64解码 进一步挖掘 function deBase64(str){ var mapDe = {}, mapEn = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); for(var i=0; i<64; i++){mapDe[mapEn] = i;}; var buf = [], arr = str.split(''), map = mapDe, n = arr.length, val, i=0, j=0; if(n % 4)return; while(i < n){ val = (map[arr[ i ]] << 18) | (map[arr[i+1]] << 12) | (map[arr[i+2]] << 6) | (map[arr[i+3]]); buf.push(val>>16,val>>8 & 0xFF,val & 0xFF); i += 4; } while(arr[--n] == '='){buf.pop();} while(j<buf.length){buf[j] = String.fromCharCode(buf[j++]);} return buf.join(''); }; // 隐藏或显示 function toggle(obj){ obj.style.display = (obj.style.display == 'none')?'':'none'; return true; }; // keycode 转换 function getKeys(e){ var codetable={'96':'Numpad 0','97':'Numpad 1','98':'Numpad 2','99':'Numpad 3','100':'Numpad 4','101':'Numpad 5','102':'Numpad 6','103':'Numpad 7','104':'Numpad 8','105':'Numpad 9','106':'Numpad *','107':'Numpad +','108':'Numpad Enter','109':'Numpad -','110':'Numpad .','111':'Numpad /','112':'F1','113':'F2','114':'F3','115':'F4','116':'F5','117':'F6','118':'F7','119':'F8','120':'F9','121':'F10','122':'F11','123':'F12','8':'BackSpace','9':'Tab','12':'Clear','13':'Enter','16':'Shift','17':'Ctrl','18':'Alt','20':'Cape Lock','27':'Esc','32':'Spacebar','33':'Page Up','34':'Page Down','35':'End','36':'Home','37':'←','38':'↑','39':'→','40':'↓','45':'Insert','46':'Delete','144':'Num Lock','186':';:','187':'=+','188':',<','189':'-_','190':'.>','191':'/?','192':'`~','219':'[{','220':'\|','221':']}','222':'"'}; var Keys = ''; e.shiftKey && (e.keyCode != 16) && (Keys += 'shift+'); e.ctrlKey && (e.keyCode != 17) && (Keys += 'ctrl+'); e.altKey && (e.keyCode != 18) && (Keys += 'alt+'); return Keys + (codetable[e.keyCode] || String.fromCharCode(e.keyCode) || ''); }; // 即时显示快捷键 function trans_code(ID, codes){ var cobj = $('#'+ID); cobj.value = GM_getValue(ID, codes); cobj.addEventListener('keydown',function(e){ this.value = getKeys(e); e.preventDefault(); e.stopPropagation(); },false); }; // 监视并执行快捷键对应的函数 function addHotKey(codes,func){ document.addEventListener('keydown', function(e){ if ((e.target.tagName != 'INPUT') && (e.target.tagName != 'TEXTAREA') && getKeys(e) == codes){ func(); e.preventDefault(); e.stopPropagation(); } }, false); }; // 识别本次登录用户名 function getUserName(){ var ck = getCookie('ck'), mixName = GM_getValue('mixName', false); if(ck){//是否已登录 if(mixName && mixName.indexOf('@'+ck) > 0){//本次登录是否上次保存用户 return mixName.replace('@'+ck, ''); } GM_xmlhttpRequest({ method: 'GET', url: 'http://www.douban.com/mine/', onload: function(resp){ if(resp.status < 200 || resp.status > 300) {return;}; var name = String(resp.responseText).match(/douban\.com\/people\/([^\/]+)\//i)[1]; GM_setValue('mixName', name + '@' + getCookie('ck')); return name; } }); } return false; }; /* ************************ 豆瓣助手设置界面 ************************ */ // 添加导航栏按钮 function settingBar(){ var db_hp = document.createElement('a'); db_hp.id = 'db_hp'; db_hp.href = 'javascript:'; db_hp.innerHTML = '豆瓣助手'; var _status = $('#status') || $('.top-nav-info')[0]; if (_status.lastChild.innerHTML){ _status.appendChild(db_hp); }else{ _status.insertBefore(db_hp, _status.lastChild.previousSibling); }; $('#db_hp').addEventListener('click', function(){sw_set(false);}, false); // 加载HTML等 GM_addStyle('\ #db_div {\ background:#fff;\ position:fixed;\ width:500px;\ top:20%;\ left:30%;\ border:1px solid #bbb;\ z-index:100;\ }\ #db_shadow {\ position:absolute;\ width:100%;\ height:100%;\ top:-12px;\ left:-12px;\ border:12px solid #000;\ opacity:0.2;\ z-index:-1;\ }\ #db_div_a {\ position:absolute;\ left:-69px;\ border-top:12px solid #ccc;\ border-bottom:12px solid #ccc;\ }\ #db_div_a a {\ display:block;\ font-weight:bold;\ background:#ccc;\ padding:8px;\ border-right:1px solid #999;\ color:#000;\ opacity:0.7;\ }\ #db_div div {\ padding:20px;\ }\ #db_div label {\ cursor:pointer;\ margin:0 40px 0 0;\ padding:2px;\ }\ #db_div label:hover {\ background:#83bf73;\ color:#fff;\ -moz-border-radius:3px;\ -webkit-border-radius:3px;\ }\ #db_div textarea {\ font-size:12px;\ }\ #db_div .gact a {\ -moz-border-radius:10px;\ -webkit-border-radius:10px;\ padding:2px 20px;\ }\ #db_btm {\ background:#fff;\ display:block;\ position:absolute;\ top:-35px;\ left:-12px;\ border-right:12px solid #ccc;\ border-top:12px solid #ccc;\ border-left:12px solid #ccc;\ text-align:center;\ }\ '); var db_div = document.createElement('div'); db_div.id = 'db_div'; db_div.style.display = 'none'; db_div.innerHTML = '\ <span id="db_shadow">\ </span>\ <span id="db_div_a">\ <a href="javascript:" style="border-right:1px solid #fff;background:#fff;opacity:1;">功能介绍</a>\ <a href="javascript:">交流增强</a>\ <a href="javascript:">相册增强</a>\ <a href="javascript:">贴图识别</a>\ <a href="javascript:">快速搜索</a>\ <a href="javascript:">其他功能</a>\ </span>\ <div id="功能介绍">\ 【全部功能】(在豆瓣网右上角有设置按钮,或者按Alt+Q):\ <br> 1、只看/高亮/忽略某人发言\ <br> 2、显示小组楼层数\ <br> 3、"直播模式"(刷新或翻页后自动只看楼主)\ <br> 4、按 Ctrl + Enter 即可提交回复\ <br> 5、按 Alt+Enter 在回复框中添加个性签名(在豆瓣助手配置中心可自定义内容)\ <br> 6、引用回复按钮+浮动回复框,适用于豆瓣全站讨论页面(快捷键Shift + Enter)\ <br> 7、小组贴图:自动识别网页中的图片链接,并将其显示出来。\ <br> 8、书影音快速搜索链接,可自定义。\ <br> 9、聚焦时高亮输入框,帮助集中注意力\ <br> 10、豆瓣相册直接显示大图(在缩略图上点击鼠标中键单击显示/隐藏大图)\ <br> 11、自动隐藏小组介绍\ <br> 12、浮动定位工具,快速置顶置地,DIY常用链接\ <br> 13、友邻工具条\ <br> 14、全站搜索,在任意页面搜索书影音等\ <br> 15、顶部滑动导航条,快速跳转节省时间\ <br> 16、自动电梯,小组标题提供最后几页链接\ <br> 17、破解音乐人下载链接\ <br> 18、留言板增强,可直接回复至他人留言板\ <br> 19、自定义小组分类\ </div>\ <div id="交流增强" style="display:none;">\ <label><input type="checkbox" id="just_view" />允许只看、高亮、忽略某人发言</label>\ <br>\ <label><input id="hlcolor" size=6 onMouseover="this.style.background=\'#fff\';" onKeyup="this.style.background=this.value" onMouseout="this.style.background=this.value" />高亮背景色</label>\ <br>\ <label><input type="checkbox" id="count" />允许显示楼层数</label>\ <label><input type="checkbox" id="requote" />允许引用、回复某人发言</label>\ <br>\ <label><input type="checkbox" id="tidybar" />使用紧凑工具条</label>\ <label><input type="checkbox" id="auto_hide" />自动隐藏工具条</label>\ <br>\ <label><input type="checkbox" id="exBoard" />增强留言板功能</label>\ <br>\ <label><input id="diylen" size=4 />当引用文字超过该长度,提示是否截断</label><br>\ <textarea rows="10" cols="81" id="diyword"></textarea><br>\ 交流增强适用于豆瓣小组与论坛等,快捷键:<br>\ 打开浮动回复框为 Shift+Enter<br>\ 退出为 Esc(会清空内容)<br>\ 提交为 Ctrl+Enter(适用于豆瓣大部分输入框)<br>\ 个性签名使用快捷键为 Alt+Enter,可瞬间输入设定文字。(适用于豆瓣大部分输入框)\ </div>\ <div id="相册增强" style="display:none;">\ <label><input type="checkbox" id="highslide" />开启高阶相册浏览模式</label>\ <br>\ <label><input type="checkbox" id="alb_big" />允许缩略图上点击鼠标中键显示大图</label>\ <br>\ <label><input type="checkbox" id="loadAllPic" />允许一键显示全部大图</label>\ <br>\ <label><input type="checkbox" id="down_photo" />允许批量下载大图</label>\ <br>\ <p>开启相册高阶浏览模式后,将提供前所未有的相册浏览体验。\ <br> 从此克服豆瓣看图的种种不便,看图不再是麻烦。\ <br> 此功能配合豆瓣助手自带的加载全部页面功能一起使用,效果更佳。\ <br> (后续版本将提供更丰富的配置选项)</p>\ <br>\ </div>\ <div id="贴图识别" style="display:none;">\ <label><input type="radio" name="showpic" />不开启图片识别</label><br>\ <label><input type="radio" name="showpic" />只对豆瓣网开启</label><br>\ <label><input type="radio" name="showpic" />对所有网页开启</label><br>\ <label><input type="radio" name="showpic" />对所有网页开启,点击鼠标中键时才加载(速度最快,推荐选项)</label>\ <br>\ <p>本功能为自动识别网页中文字链接中的图片,并将其显示出来。\ <br> 主要用于克服豆瓣小组不能贴图的缺陷,方便看图。\ <br> (此功能对所有网站适用,默认只识别豆瓣中的图片;可用鼠标中键单击显示/隐藏图片)</p>\ <br>\ </div>\ <div id="快速搜索" style="display:none;">\ <label><input type="checkbox" id="search_bar" />开启快速搜索条</label>\ <label>添加自定义搜索引擎↓</label>\ <textarea rows="10" cols="81" id="otherEngines"></textarea>\ <br><strong>添加其他引擎的使用说明:</strong><br>\ 打开 “豆瓣助手” 界面后看到添加其他搜索引擎文本框里有默认的如下内容:<br>\ ----------------------------------------------------------<br>\ 豆瓣小组|http://www.douban.com/group/search?q={word}<br>\ 百度知道|http://zhidao.baidu.com/q?word={gb:word}&ct=17&tn=ikaslist&rn=10<br>\ ----------------------------------------------------------<br>\ 1、以花括号括起来的部分 {word} 代表搜索的关键字,该关键字将会以 UTF-8 方式编码。如果想要以 GB2312 方式编码,请使用{gb:word},编写地址时要注意这点。<br>\ 2、以竖线 | 为分隔符,前面的 “豆瓣小组” 是在页面上显示的链接名称,后面的 http://www.douban.com/group/search?q={word} 是发起搜索的链接地址。<br>\ 3、每行对应一个搜索引擎。特别注意每行中必须有个竖线 | 分隔前后两部分。<br>\ 你可以仿照例子添加其他搜索,比如雅虎、wiki等等的。\ </div>\ <div id="其他功能" style="display:none;">\ <label>设置界面快捷键<input size=8 id="hk_db"/></label><br><br>\ <label><input type="checkbox" id="hl_input" />高亮焦点输入框 </label>\ <label><input type="checkbox" id="musicLink" />破解音乐人下载链接</label>\ <br>\ <label><input type="checkbox" id="hide_grpinfo" />自动隐藏小组介绍</label>\ <label><input type="checkbox" id="autoElevator" />开启自动电梯</label>\ <br>\ <label><input type="checkbox" id="settler" />开启浮动定位条 </label>\ <label><input type="checkbox" id="sortGroup" />开启小组分类 </label>\ <br>\ <label><input type="checkbox" id="multiSearch" />开启全站搜索 </label>\ <label><input type="checkbox" id="slideBar" />开启顶部滑动导航条</label>\ <br>\ <label><input type="checkbox" id="supportHelper" />通过在卓越、淘宝商城上买书支持豆瓣助手</label>\ <br>\ <br>\ <label><input type="checkbox" id="friendsTool" />开启友邻工具条</label>\ <br>\ <label>浮动定位条快捷键↓</label><br>\ <label>置顶:<input size=8 id="hk_top"/></label>\ <label>置底:<input size=8 id="hk_btm"/></label><br>\ <label>上页:<input size=8 id="hk_pre"/></label>\ <label>下页:<input size=8 id="hk_nxt"/></label><br>\ <label>浮动定位条自定义链接↓(用法与添加自定义搜索引擎类似)</label><br>\ <textarea rows="6" cols="81" id="otherLinks"></textarea>\ <br>\ <label><a href="http://userscripts.org/scripts/show/49911" target=_blank>详细介绍及使用说明</a></label>\ <label><a href="http://www.douban.com/group/topic/6604219/" target=_blank>反馈意见</a></label>\ </div>\ <span id="db_btm">\ <input type="button" title="部分选项需要刷新页面才能生效" id="s_ok" value="√ 确认">\ <input type="button" title="取消本次设定,所有选项还原" id="s_cl" value="X 取消">\ </span>\ '; $('/body')[0].appendChild(db_div); $('#s_ok').addEventListener('click', function(){sw_set(true);}, false); $('#s_cl').addEventListener('click', function(){sw_set(false);}, false); $('#db_div_a').addEventListener('mouseover', function(e){ if(!e.target.id){ setStyles($$('#db_div DIV'), 'display:none;'); $('#'+e.target.innerHTML).style.display = 'block'; setStyles($$('#db_div_a A'), ''); e.target.style.cssText = 'border-right:1px solid #fff;background:#fff;opacity:1;'; } }, false); }; // 显示\隐藏设置栏 function sw_set(ch){ toggle($('#db_div')); if (ch){ //写入图片识别选项 var pic_sw = $('showpic'); for (var i=0,j=pic_sw.length; i<j; i++){if (pic_sw.checked){GM_setValue('choice', i);}}; GM_setValue('hlcolor', $('#hlcolor').value);//写入高亮背景色 GM_setValue('otherEngines', $('#otherEngines').value);//写入自定义搜索引擎 GM_setValue('otherLinks', $('#otherLinks').value);//写入自定义链接 GM_setValue('diyword', $('#diyword').value);//写入个性签名 GM_setValue('diylen', parseInt($('#diylen').value) );//自定义引文截断长度 db_write('just_view');//写入只看、高亮、忽略选项 db_write('search_bar');//写入搜索条选项 db_write('hl_input');//写入高亮输入框选项 db_write('count');//写入数楼选项 db_write('auto_hide');//写入自动隐藏选项 db_write('tidybar');//写入工具条样式 db_write('requote');//写入引用回复选项 db_write('settler');//写入浮动定位工具选项 db_write('hide_grpinfo'); //写入隐藏小组介绍选项 db_write('friendsTool'); //写入友邻工具选项 db_write('multiSearch'); //写入全站搜索选项 db_write('slideBar'); //写入滑动导航条选项 db_write('autoElevator'); //写入自动电梯选项 db_write('exBoard'); //写入留言板增强选项 db_write('musicLink'); //写入音乐下载链接选项 db_write('sortGroup'); //写入小组分类选项 db_write('alb_big');//中键相册大图 db_write('highslide'); //相册浏览模式 db_write('loadAllPic'); //一键显示全部大图 db_write('down_photo'); //批量下载大图 db_write('supportHelper'); //通过在卓越、淘宝商城上买书支持豆瓣助手 GM_setValue('hk_db', $('#hk_db').value);//写入自定义搜索引擎 GM_setValue('hk_top', $('#hk_top').value);//写入置顶快捷键 GM_setValue('hk_btm', $('#hk_btm').value);//写入置底快捷键 GM_setValue('hk_pre', $('#hk_pre').value);//写入上一页快捷键 GM_setValue('hk_nxt', $('#hk_nxt').value);//写入下一页快捷键 }else{ //读取高亮背景色 $('#hlcolor').value = GM_getValue('hlcolor', '#eeffee'); $('#hlcolor').style.background = GM_getValue('hlcolor'); $('showpic')[GM_getValue('choice', 1)].checked = true;//读取图片识别选项 $('#otherEngines').value = GM_getValue('otherEngines', '土豆豆单|http://so.tudou.com/psearch/{word}\n土豆视频|http://so.tudou.com/isearch/{word}\n优酷视频|http://so.youku.com/search_video/q_{word}\n优酷列表|http://so.youku.com/search_playlist/q_{word}\n豆瓣小组|http://www.douban.com/group/search?q={word}\n百度知道|http://zhidao.baidu.com/q?word={gb:word}&ct=17&tn=ikaslist&rn=10');//读取自定义搜索引擎 $('#otherLinks').value = GM_getValue('otherLinks', '我的话题|http://www.douban.com/group/my_topics\n我的评论|http://www.douban.com/mine/discussions\n');//读取自定义链接 $('#diyword').value = GM_getValue('diyword', '个性签名');//读取个性签名 $('#diylen').value = GM_getValue('diylen', 500);//自定义引文截断长度 db_read('just_view',true);//读取只看、高亮、忽略选项 db_read('search_bar',true);//读取搜索条选项 db_read('hl_input',true);//读取高亮输入框选项 db_read('count',true);//读取数楼选项 db_read('auto_hide',false);//读取自动隐藏选项 db_read('tidybar', true);//读取工具条样式 db_read('requote', true);//读取引用回复选项 db_read('settler', true);//读取浮动定位工具选项 db_read('hide_grpinfo',true);//读取隐藏小组介绍选项 db_read('friendsTool',true);//读取友邻工具选项 db_read('multiSearch',true);//读取全站搜索选项 db_read('slideBar',true);//读取滑动导航条选项 db_read('autoElevator',true);//读取自动电梯选项 db_read('exBoard',true);//读取留言板增强选项 db_read('musicLink',true);//读取音乐下载链接选项 db_read('sortGroup',true);//读取小组分类选项 db_read('alb_big',true);//中键相册大图 db_read('highslide',false);//相册浏览模式 db_read('loadAllPic',true);//一键显示全部大图 db_read('down_photo',true);//批量下载大图 db_read('supportHelper',true);//通过在卓越、淘宝商城上买书支持豆瓣助手 trans_code('hk_db', 'alt+Q');//显示豆瓣助手设置界面快捷键 trans_code('hk_top', 'W');//显示置顶快捷键 trans_code('hk_btm', 'S');//显示置底快捷键 trans_code('hk_pre', 'A');//显示上一页快捷键 trans_code('hk_nxt', 'D');//显示下一页快捷键 } }; //checkbox通用读取、写入函数 function db_read(id,value){$('#'+id).checked = GM_getValue(id, value);}; function db_write(id){GM_setValue(id, $('#'+id).checked);}; /* ************************ 豆瓣相册处理 ************************ */ // 相册增强 function albBig(){ var photitle = $$('.article>.photitle, .bd>.photitle, .article>.opt-bar-line')[0];// 相册、活动, 小站、阿尔法城图片墙, 剧照、海报 // GM_addStyle('.event-photo-list li {min-width:33%!important;} .photo_wrap {min-width:170px!important;}'); if (/album|photos(?!\/photo)/i.test(location.href) && photitle ){ // 添加相册工具条 photitle.innerHTML += '<br/>' + (GM_getValue('highslide', false) ? '<a href="javascript:" id="switchHighslide" class="btn-donate fleft" style="background:#83BF73;color:#fff;" title="点击关闭高阶浏览模式">关闭浏览模式</a>' : '<a href="javascript:" id="switchHighslide" class="btn-donate fleft" title="点击开启高阶浏览模式,享受浏览图片的乐趣 by豆瓣助手">开启浏览模式</a>' ) + ' ><a href="javascript:" class="all_page" title="在本页面合并显示所有分页的图片,若分页较多,需耗时较长">加载所有分页</a>' + (GM_getValue('loadAllPic', true) && ' ><a href="javascript:" id="showAllBig" title="点击显示本页全部大图,再次点击全部还原">显示全部大图</a>') + (GM_getValue('down_photo', true) && ' ><a href="javascript:" id="downPhoto" title="批量下载本页全部大图的方法介绍,点击后请看右侧栏说明">批量下载大图</a>'); $('#switchHighslide').addEventListener('click', function(){ GM_setValue('highslide', !GM_getValue('highslide', false)); location.reload(); }, false);// 切换高阶浏览模式 GM_getValue('alb_big', true) && alb_all(true);// 允许缩略图上点击鼠标中键显示大图 $('.all_page')[0].addEventListener('click', function(){all_page();}, false);// 顶部加载所有分页 $('#showAllBig') && $('#showAllBig').addEventListener('click', function(){alb_all(false);}, false);// 一键显示全部大图 $('#downPhoto') && $('#downPhoto').addEventListener('click', function(){down_photo();}, false);// 批量下载大图 // 添加加载下一页模块 if($('.paginator')[0]){ GM_addStyle('.btn-donate{display:inline-block;*display:inline;zoom:1;padding:0 8px;vertical-align:middle;*vertical-align:baseline;height:19px;line-height:19px;line-height:21px\9;overflow:hidden;border:1px solid#edceba;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}a.btn-donate:link,a.btn-donate:visited{border-color:#f2ece7;background-color:#fff6ee;color:#99776b}a.btn-donate:hover,a.btn-donate:active{border-color:#edceba;background-color:#fff0e2;color:#99776b}'); var next = document.createElement('span'); next.innerHTML = '<a id="nextPicPage" style="text-align:center;width:80%;" href="javascript:;" title="将下一页加载到当前页面" class="btn-donate">加载下一页∨</a>' + '<a style="text-align:center;width:13%;" href="javascript:;" title="在本页面合并显示所有分页,若分页较多,需耗时较长" class="btn-donate all_page">加载所有分页</a>'; $('.paginator')[0].parentNode.appendChild(next); $('#nextPicPage').addEventListener('click', function(){loadPicPage('next', true);}, false);// 加载下一页 $('.all_page')[1].addEventListener('click', function(){all_page();}, false);// 底部加载所有分页 }; // 相册浏览模式 /** * Name: Highslide JS * Version: 4.1.9 (2010-07-05) * Author: Torstein Hønsi * Support: <!-- w --><a class="postlink" href="http://www.highslide.com/support">www.highslide.com/support</a><!-- w --> * License: <!-- w --><a class="postlink" href="http://www.highslide.com/#license">www.highslide.com/#license</a><!-- w --> */ if(GM_getValue('highslide', true)){ albMark();// set highslide mark // add JS !GM_getValue('highslide_js', false) && GM_xmlhttpRequest({ method: 'GET', url: 'http://js-addon.googlecode.com/files/highslide.js', onload: function(xhr){ if(xhr.status == 200){ GM_setValue('highslide_js', xhr.responseText); var a = document.createElement('script'); a.innerHTML = xhr.responseText; $('/head')[0].appendChild(a); } } }); var a = document.createElement('script'); a.innerHTML = GM_getValue('highslide_js', ''); $('/head')[0].appendChild(a); // add css !GM_getValue('highslide_css', false) && GM_xmlhttpRequest({ method: 'GET', url: 'http://js-addon.googlecode.com/files/highslide.css', onload: function(xhr){ if(xhr.status == 200){ GM_setValue('highslide_css', xhr.responseText); GM_addStyle(xhr.responseText); } } }); GM_addStyle(GM_getValue('highslide_css', '')); // add config var a = document.createElement('script'); a.innerHTML = "\ hs.align = 'center';\ hs.transitions = ['expand', 'crossfade'];\ hs.fadeInOut = true;\ hs.dimmingOpacity = 0.8;\ hs.wrapperClassName = 'dark borderless floating-caption';\ hs.captionEval = 'this.thumb.alt';\ hs.marginBottom = 155;\ hs.numberPosition = 'caption';\ \ hs.addSlideshow({\ interval: 2000,\ repeat: false,\ useControls: true,\ overlayOptions: {\ className: 'text-controls',\ position: 'bottom center',\ relativeTo: 'viewport',\ offsetY: -60\ },\ thumbstrip: {\ position: 'bottom center',\ mode: 'horizontal',\ relativeTo: 'viewport'\ }\ });\ "; $('/head')[0].appendChild(a); } } }; // 添加相册浏览模式标记 function albMark(){ var unitBox = $$('.photo_wrap, .event-photo-list>ul>li, .poster-col4>li');// 相册、活动, 小站、阿尔法城图片墙, 剧照、海报 for (var a,img,i=0,j=unitBox.length; i<j; i++){ img = unitBox.getElementsByTagName('img')[0]; if(img && !img.alt){ a = unitBox.getElementsByTagName('a')[0]; a.className += ' highslide'; a.setAttribute('onclick', 'return hs.expand(this, {src:"'+img.src.replace(/thumb/, /movie\.douban/i.test(location.href) ? 'raw' : 'photo')+'"});'); desc = unitBox.getElementsByTagName('div')[2] || unitBox.getElementsByTagName('div')[1]; !/\/#comments/i.test(desc.innerHTML) && (desc.innerHTML += ' <a href="'+ a.href +'">0回应</a>'); img.alt = a.title + '<br/>' + desc.innerHTML.replace(/<p>.*<\/p>/, '');//去除小站、阿尔法城图片墙的双重说明文字 } } }; // 加载所有分页 function all_page(){ if($('.paginator')[0]){ if($$('.photo_wrap img, .photo-item img, .cover img').length <= 18){loadPicPage('prev')}; loadPicPage('next'); }else{ alert('本相册只有一页无需加载'); } }; // 相册加载函数 function loadPicPage(page, limit){ return loadPage( '//*[contains(@class,"photolst") or contains(@class,"event-photo-list") or contains(@class,"poster-col4")]', !!limit, function(){ GM_getValue('alb_big', true) && alb_all(true);//中键大图 GM_getValue('highslide', true) && albMark();// 相册浏览模式 }, '//div[@class="paginator"]/span[@class="'+page+'"]/a' ); }; // 批量下载大图 function down_photo(){ $('.aside')[0].innerHTML = '\ <p>1、点击“加载所有分页”(可跳过此步骤);</p>\ <p>2、点击“显示全部大图”;</p>\ <p>3、右键点击“另存为”本页面,保存类型选择“网页,全部”,即可在与页面同名文件夹下得到全部大图;</p>\ <p>(建议在图片全部显示完毕后再保存;也可使用迅雷等批量下载工具下载)</p>'; }; // 监视中键或全部显示 function alb_all(b){ // var imgs = $$('.article img'); var imgs = $$('.photo_wrap img, .photo-item img, .cover img'); for (var i=0,j=imgs.length; i<j; i++){ b && imgs.parentNode.addEventListener('mousedown', function(e){// 鼠标中键点击 if (e.button == 1){ chk_big(this);// 0左键; 1中键; 2右键 e.preventDefault(); e.stopPropagation(); }; }, false); !b && chk_big(imgs.parentNode);// 批量大图 }; }; // 相册切换大小图 function chk_big(p){ var h = p.innerHTML; if(/otho\.douban/i.test(h)){ // 私密相册 p.innerHTML += ''; var img = p.getElementsByTagName('img')[0]; if(!img.getAttribute('srcx')){ GM_xmlhttpRequest({ method: 'GET', url: p.href, onload: function(resp){ if(resp.status < 200 || resp.status > 300) {return;}; img.setAttribute('srcx', img.src); img.src = String(resp.responseText.match(/img\ssrc="(http:\/\/otho\.[^'"]+)"/i)[1]); }, onerror: function(){return;} }); }else{ var l = img.src; img.src = img.getAttribute('srcx'); img.setAttribute('srcx', l); }; }else{ // 公共相册 if(/movie\.douban/i.test(location.href)){ p.innerHTML = /thumb/i.test(h) ? h.replace(/thumb/, 'raw') : h.replace(/photo\/raw/, 'photo/thumb'); }else{ p.innerHTML = /thumb/i.test(h) ? h.replace(/thumb/, 'photo') : h.replace(/photo\/photo/, 'photo/thumb'); }; }; var parent2 = p.parentNode.parentNode; if(p.className == 'album_photo'){ // 小站 parent2.style.cssText = (parent2.style.width == 'auto') ? '':'width:auto;min-width:33%;'; }else if(p.parentNode.className == 'cover'){ // 剧照 parent2.style.cssText = (parent2.style.width == 'auto') ? '':'width:auto;min-width:136px;position:relative;z-index:100;'; p.getElementsByTagName('img')[0].style.cssText = 'max-width:960px;'; }else{ // 相册、活动 p.parentNode.style.width = (p.parentNode.style.width == 'auto') ? '170px': 'auto'; }; }; /* ************************ 书影音页面处理 ************************ */ // 添加搜索条 function addSearchBar() { if ($('#mainpic') && GM_getValue('search_bar', true) && !$('.s_bar')[0]){ GM_addStyle('\ #mainpic {\ overflow: visible;\ }\ .s_bar {\ z-index: 97;\ position: absolute;\ }\ .s_lin {\ position: absolute;\ top: -62px;\ left: 0px;\ visibility: hidden;\ }\ .s_lin2 {\ position: absolute;\ top: -62px;\ left: 62px;\ visibility: hidden;\ }\ .s_bar a {\ -moz-border-radius: 7px;\ -webkit-border-radius: 7px;\ display: block;\ background: #eef9eb;\ padding: 5px;\ width: 50px;\ border: 1px solid #fff;\ line-height: 160%;\ }\ .s_bar a:hover {\ border: 1px solid #aaa;\ background: #fff;\ color: #000;\ }\ .s_bar:hover .s_tt {\ visibility: hidden;\ }\ .s_bar:hover .s_lin, .s_bar:hover .s_lin2 {\ visibility: visible;\ }\ .s_bar .s_tt {\ border: 1px solid #aaa;\ width: 90px;\ line-height: 100%;\ }\ '); var keyword = $$('h1 span')[0].textContent;//取得书影音标题 var keyWd = encodeURIComponent(keyword); var s_div = document.createElement('div'); s_div.className = 's_bar'; s_div.innerHTML = '\ <a href="javascript:" class="s_tt">Search it \ <font color="red"><b>!</b>\ </font></a>\ <span class="s_lin">\ <a href="http://www.baidu.com/s?ie=utf-8&wd=' + keyWd + ' "target="_blank">百度一下</a>\ <a href="http://www.google.com/search?&q=' + keyWd + ' "target="_blank">Google</a>\ <a href="http://www.gougou.com/search?id=92452&search=' + keyWd + '"target="_blank">迅雷下载</a>\ <a href="http://book.gougou.com/search?restype=3&id=92452&search=' + keyWd + ' "target="_blank">迅雷书籍</a>\ <a href="http://www.verycd.com/search/folders/' + keyWd + ' "target="_blank">VeryCD</a>\ <a href="http://zh.wikipedia.org/w/index.php?search=' + keyWd + ' "target="_blank">维基百科</a>\ <a href="http://books.google.com/books?q=' + keyWd + ' "target="_blank">谷歌书籍</a>\ <a href="http://video.google.cn/videosearch?q=' + keyWd + '&www_google_domain=www.google.cn&emb=0#" target="_blank">谷歌视频</a>\ </span>\ <span class="s_lin2">\ </span>\ '; $('#mainpic').appendChild(s_div); otherEngines(keyword); } }; // 添加其他搜索引擎 function otherEngines(keyword){ var engines = GM_getValue('otherEngines', '土豆豆单|http://so.tudou.com/psearch/{word}\n土豆视频|http://so.tudou.com/isearch/{word}\n优酷视频|http://so.youku.com/search_video/q_{word}\n优酷列表|http://so.youku.com/search_playlist/q_{word}\n豆瓣小组|http://www.douban.com/group/search?q={word}\n百度知道|http://zhidao.baidu.com/q?word={gb:word}&ct=17&tn=ikaslist&rn=10').split(/\n/); for (i=0,j=engines.length; i<j; i++) { var engine = engines.split('|'); if (engine.length > 1) { if (engine[1].indexOf('{gb:word}') >= 0){ replace2GB(keyword, engines, engine[0]); }else{ var searchlinks = '<a href="'+ engines.replace(engine[0] + '|', '').replace(/{word}/ig, encodeURIComponent(keyword)) +'" target="_blank" >'+ engine[0].replace(/{word}|{gb:word}/ig, keyword.replace('<', '<').replace('>', '>')) +'</a>'; $('.s_lin2')[0].innerHTML += searchlinks; } } } }; // 将其他搜索引擎中的搜索关键字替换成 GB2312 编码格式。编码通过查询 baidu 获得 // 感谢 Googlekingkong 的作者,这是他想出的方法 function replace2GB(keyword, enginesi, engine0){ GM_xmlhttpRequest({ method: 'GET', url: 'http://www.baidu.com/s?ie=utf-8&wd=' + encodeURIComponent(keyword), overrideMimeType: 'text/xml; charset=gb2312', onload: function(resp){ if (resp.status < 200 || resp.status > 300) { return; }; var keywordGB = String(resp.responseText.match(/word=[^'"&]+['"&]/i)).replace(/word=|['"&]/ig,''); var searchlinks = '<a href="'+ enginesi.replace(engine0 + '|', '').replace(/{gb:word}/ig, keywordGB) +'" target="_blank" >'+ engine0.replace(/{word}|{gb:word}/ig, keyword.replace('<', '<').replace('>', '>')) +'</a>'; $('.s_lin2')[0].innerHTML += searchlinks; }, onerror: function(){ return; } }); }; /* ************************ 图片识别处理 ************************ */ // 检测、显示图片 function showPic(){ var a_links = document.links; _pic_ = /^http[^\?\s]*\.(?:jpg|jpeg|jpe|jfif|bmp|png|gif|tif|tiff|ico)/i; switch ( parseInt(GM_getValue('choice', 1)) ){ case 0: break; case 1: if (Douban || location.href == 'http://userscripts.org/scripts/show/49911') { }else{ break; }; case 2: for (var i=0,n=a_links.length; i<n; i++){ checkIMG(a_links); }; break; case 3:// 点击时才检测图片 for (var i=0,n=a_links.length; i<n; i++){ a_links.addEventListener('mousedown', function(e){ (e.button == 1) && checkIMG(this) }, false); }; break; } }; //检测图片 function checkIMG(link){ var href = link.href; var inner = link.innerHTML; if ( _pic_.test(href) && !/<img\s/i.test(inner) ){ link.addEventListener('mousedown', function(e){ (e.button == 1) && toggle(this.childNodes[0]) && toggle(this.childNodes[1])// 图片\链接切换 }, false); link.innerHTML = '<img style="max-width:520px;" alt="图片载入ing..." title="点击鼠标中键可切换链接/图片 by豆瓣助手" src="' + href + '" /><span style="display:none;">' + inner + '</span>'; } }; /* ************************ 阿尔法城, 小组, 书影音评论 + 论坛 + 相册 增强处理 ************************ */ // 隐藏小组介绍 function hideMSG(){ var h2 = $('/h2')[0] && $('/h2')[$('#pop_login')?1:0]; if(GM_getValue('hide_grpinfo',true) && h2 && /最近小组话题/.test(h2.innerHTML) && !$('#_toggle')){ toggle($('.bd')[2]); $('#header').innerHTML += '<a id="_toggle" style="font-size:12px;position:absolute;top:165px;z-index:1;">>显示/隐藏小组介绍<</a>'; $('#_toggle').addEventListener('click',function(){toggle($('.bd')[2])} ,false); } }; // 自动电梯 function autoElevator(){ var reNums = xpath('//table[@class="list-b" or @class="olt"]/tbody/tr[not(@dbMark)]/td[last()-1]'); if( GM_getValue('autoElevator',true) && reNums.snapshotItem(0) &&/回应/.test(reNums.snapshotItem(0).textContent + reNums.snapshotItem(1).textContent) ){//论坛表格第一行没有“回应” GM_addStyle('.pageNum{float:right;}'); var reply = xpath('//table[@class="list-b" or @class="olt"]/tbody/tr[not(@dbMark)]/td[1]'); for(var i=0,j=reNums.snapshotLength; i<j; i++){ var title = reply.snapshotItem(i), numWord = reNums.snapshotItem(i).textContent.replace(/[\s\D]*/g,''), num = Number(numWord), lastPage, href, linkCache = '<span class="pageNum">('; title.parentNode.setAttribute('dbMark', '');//已处理标记,加载下一页后不重复处理 if(!isNaN(num) && num>100){ lastPage = numWord.slice(0, -2); href = title.getElementsByTagName('a')[0].href; // num > 400 && (linkCache += ' <a href="'+ href +'?start='+ (lastPage-3) +'00" title="倒数第四页">'+ (lastPage-2) +'</a> |'); // num > 300 && (linkCache += ' <a href="'+ href +'?start='+ (lastPage-2) +'00" title="倒数第三页">'+ (lastPage-1) +'</a> |'); num > 200 && (linkCache += ' <a href="'+ href +'?start='+ (lastPage-1) +'00" title="倒数第二页">'+ lastPage +'</a> |'); linkCache += ' <a href="'+ href +'?start='+ lastPage +'00#last" title="自动电梯:最后一页">'+ (lastPage-1+2) +'</a> ) </span>'; title.innerHTML = linkCache + title.innerHTML; } } } }; // 添加增强工具条 function exGroup(){ var ct = GM_getValue('count', true), jv = GM_getValue('just_view', true), re = GM_getValue('requote', true); var postArea = $$('div.post-comments, ul.topic-reply, div#comments')[0];// 讨论区域 // 阿尔法城, 小组, 书影音评论, 论坛 + 相册 if ( (ct || jv || re) && postArea ){ // 书影音评论 重构 var chgArea = $$('div#comments>span.wrap')[0]; if (chgArea){ chgArea.parentNode.innerHTML = chgArea.parentNode.innerHTML .replace(/(<h2>|<div)/, '</p><div class="group_banned"></div><br/></div>$1')// 末尾补完 .replace(/<span class="wrap">/, '<div class="dbhp"><span class="wrap">') .replace(/<\/h3><\/span>/g, '</h3></span><p>')// 以p包围发言 .replace(/<span class="wrap">/g, '</p><div class="group_banned"></div><br/></div> <div class="dbhp"><span class="wrap">')// 首位嵌套 .replace(/<\/p><div class="group_banned"><\/div><br\/><\/div> <div class="dbhp">/, '');// 去除开头多余 }; // 论坛 + 相册 重构 if ($$('div#comments>table')[0]){ postArea.innerHTML = postArea.innerHTML .replace(/<\/h4><\/span>/g, '</h4> </span><p>') .replace(/<\/td><\/tr>/g, '</p></td> </tr>'); }; // 未处理的回复楼层 var replys = xpath( '//div[contains(@class,"post-comments")]/*[contains(@class,"comment-item") and not(@dbMark)]' + '|//ul[contains(@class,"topic-reply")]/li[not(@dbMark)]' + '|//div[@id="comments"]/div[contains(@class,"dbhp") and not(@dbMark)]' + '|//div[@id="comments"]/table[not(@dbMark)]' ); var start = parseInt(QueryString('start')) + 1; //楼层起点document.body.getAttribute('startNum') || //工具条CSS & HTML GM_addStyle(GM_getValue('auto_hide', false)?'.ctrl_tool{display:none;} li:hover .ctrl_tool{display:block;}':''); var re_s = re?'<a name="db_re" href="javascript:" title="回复该用户发言" >回</a>\ <a name="db_qt" href="javascript:" title="引用该用户发言" >引</a>':''; var re_l = re?'><a name="db_re" href="javascript:" title="回复该用户发言" >回复</a> \ ><a name="db_qt" href="javascript:" title="引用该用户发言" >引用</a> ':''; var jv_s = jv?'<a name="db_jv" href="javascript:" title="只看该用户所有发言" >只</a>\ <a name="db_hl" href="javascript:" title="高亮该用户所有发言,再次点击取消高亮" >亮</a>\ <a name="db_ig" href="javascript:" title="忽略该用户所有发言" >略</a>\ <a name="db_bk" href="javascript:" title="复原所有发言" >原</a>':''; var jv_l = jv?'><a name="db_jv" href="javascript:" title="只看该用户所有发言" >只看</a> \ ><a name="db_hl" href="javascript:" title="高亮该用户所有发言,再次点击取消高亮" >高亮</a> \ ><a name="db_ig" href="javascript:" title="忽略该用户所有发言" >忽略</a> \ ><a name="db_bk" href="javascript:" title="复原所有发言" >复原</a> ':''; var clibtn = GM_getValue('tidybar', true) ? '>'+re_s+jv_s+' ' : re_l+jv_l; //逐楼添加工具条 for (var i=0,l=replys.snapshotLength; i<l; i++){ var replyI = replys.snapshotItem(i); var rehead = replyI.querySelector('div.author, div.bg-img-green>h4, h3>span.pl, td>span.wrap>h4');// 留言头部标题 replyI.setAttribute('dbMark', ''); if (ct && rehead.firstChild){//数楼 rehead.firstChild.insertData(0,parseInt(i) + start + '楼 '); // document.body.setAttribute('startNum', start); }; var bar = replyI.querySelector('div.group_banned, td:last-child'); bar && (bar.className += ' admin-lnks'); if (clibtn && bar){ var span = document.createElement('span'); span.className='gact fright ctrl_tool'; span.innerHTML = clibtn; bar.appendChild(span); }; }; //全部回复楼层 //捆绑函数被取消后的临时应对方法,将来改为只捆绑body,然后识别name var allReplys = $$('div.post-comments>.comment-item, ul.topic-reply>li, div#comments>div.dbhp, div#comments>table'); for (var i=0,j=allReplys.length; i<j; i++){ if (re && $('db_re')){//快速回复 $('db_re').addEventListener('click', requote, false); $('db_qt').addEventListener('click', requote, false); }; if (jv && $('db_jv')){//只看高亮等 $('db_jv').addEventListener('click', just_view, false); $('db_hl').addEventListener('click', just_view, false); $('db_ig').addEventListener('click', just_view, false); $('db_bk').addEventListener('click', just_view, false); } }; //楼主工具条 var LZbar = $$('div.note-ft, div.post-content, div.topic-opt, div.review-panel, .wr td>div.pl')[0];// 日记, 阿尔法城, 小组, 书影音评论, 论坛 if (jv && LZbar && !$('#autolift')){ var toptool = document.createElement('span'); toptool.className='fleft'; toptool.id = $$('#db-usr-profile a, .post-info>.from>a, h3>.pl20>a, .piir a, .wr a')[0].href; toptool.innerHTML = '\ ><a href="javascript:" id="db_jv" title="只看楼主发言" >只看</a> \ ><a href="javascript:" id="db_hl" title="高亮楼主所有发言,再次点击取消高亮" >高亮</a> \ ><a href="javascript:" id="db_ig" title="忽略楼主所有发言" >忽略</a> \ ><a href="javascript:" id="db_bk" title="复原所有发言" >复原</a> \ ><a href="javascript:" id="livemod" title="开启直播模式,刷新及翻页后自动只看楼主" >直播模式</a> \ ><a href="javascript:" id="autolift" title="点击自动生成电梯链接" >电梯助手</a> '; LZbar.appendChild(toptool); $('#db_jv').addEventListener('click', just_view, false); $('#db_hl').addEventListener('click', just_view, false); $('#db_ig').addEventListener('click', just_view, false); $('#db_bk').addEventListener('click', just_view, false); //直播按钮 $('#livemod').addEventListener('click', function(){ location.href = location.href.replace(location.search,'') + '?jv=' + xpath('//a[contains(@href,"/people/") and not(./child::img)]', this.parentNode.parentNode.parentNode).snapshotItem(0).href.match(/people\/([^\/\s]+)\/?/)[1]; }, false); // 电梯助手 $('#autolift').addEventListener('click', function(){ if($('.paginator')[0]){ var autolift = '请把以下内容粘帖进帖子\n直达电梯:'; for (var p=$$('.aside .paginator>a'),i=0,l=p.length; i<l; i++){ autolift += '\n第' + p.textContent + '页:' + p.href; } var re_text = $('#re_text'); re_text.value += autolift + '#last\nby Douban Helper'; $('#re_f').style.display = 'block'; re_text.focus(); }else{ alert('只有一页无需电梯'); } }, false); }; // 检测是否直播模式 islivemod(); if (re && !$('#re_f')){// 添加快速回复框 var re_f = document.createElement('div'); re_f.id = 're_f'; re_f.style.cssText = 'position:fixed;top:25%;border:1px solid #ccc;display:none;'; var action = /group|forum/.test(location.href)?'add_comment':'?post=ok#last'; re_f.innerHTML = '\ <form name="comment_form" method="post" action="'+ action +'" >\ <div style="display: none;"><input name="ck" value='+ getCookie('ck') +' type="hidden"></div>\ <textarea id="re_text" name="rv_comment" rows="20" style="font-size:12px;font-family:Arial;width:310px;border:0px;border-bottom:1px solid #ccc;"></textarea><br>\ <input value="加上去" type="submit">\ <input value="取消" type="button" onClick="document.getElementById(\'re_f\').style.display=\'none\'">\ <input value="清空" type="button" onClick="document.getElementById(\'re_text\').value=\'\';document.getElementById(\'re_text\').focus();">\ <a class="fright gact" href="javascript:;" title=" \n快捷键:\n打开为Shift+Enter\n退出为Esc(会清空内容)\n提交为Ctrl+Enter\n个性签名为Alt+Enter(在豆瓣助手中设置)。\n\n在输入框内除Ctrl+Enter以及Esc外,其他快捷键无效。\n发言失败时,请自行判断是否已经登录并有权发言。" onClick="document.getElementById(\'re_text\').value+=this.title;document.getElementById(\'re_text\').focus();">[使用说明]</a>\ <a class="fright gact" href="javascript:;" title=" \n'+GM_getValue('diyword', '个性签名')+'" onClick="document.getElementById(\'re_text\').value+=this.title;document.getElementById(\'re_text\').focus();">[个性签名]</a>\ </form>'; $('.aside')[0].appendChild(re_f); //修复豆瓣相册在输入框内按方向键翻页的UBG unsafeWindow.input_ban && unsafeWindow.input_ban(); //加载 Shift + Enter 开关回复框快捷键 addHotKey('shift+Enter',function(){ var re_text = $('#re_text'); toggle($('#re_f')); re_text.focus(); }); //退出快捷键为 Esc $('#re_f').addEventListener('keydown', function(e){ if (e.keyCode == '27'){ toggle($('#re_f')); $('#re_text').value = ''; } }, false); //个性签名快捷键为 Alt + Enter for(var i=0,j=$('rv_comment').length;i<j;i++){ $('rv_comment').addEventListener('keydown', function(e){ if (e.altKey && e.keyCode == '13'){ this.value += '\n'+ GM_getValue('diyword', '个性签名'); } }, false); } } } }; // 只看\高亮\忽略\复原 操作 function just_view(urlmsg){ var isLive = (typeof(urlmsg) == 'string')?true:false;// 是否直播 var todo = isLive ? 'db_jv' : (this.name || this.id);// 点击按钮类别 var parent_3 = isLive ? '' : this.parentNode.parentNode.parentNode;// 加三元选择符是为了兼容“直播模式” var clickNameUrl = isLive ? urlmsg : (this.parentNode.id || xpath('//a[contains(@href,"/people/") and not(./child::img)]', parent_3).snapshotItem(0).href).match(/people\/([^\/\s]+)\/?/)[1];// 楼主||楼层发言人url var replys = $$('div.post-comments>.comment-item, ul.topic-reply>li, div#comments>div.dbhp, div#comments>table'); for (var i=0,j=replys.length; i<j; i++){ var reply = replys; var isit = (xpath('//a[contains(@href,"/people/")]', reply).snapshotItem(0).href.indexOf(clickNameUrl) >= 0)?true:false; if (todo == 'db_jv'){ reply.style.display = isit?'':'none'; }else if(todo == 'db_hl' && isit){ reply.style.background = (reply.style.background)?'':GM_getValue('hlcolor', '#eeffee'); }else if(todo == 'db_ig' && isit){ reply.style.display = 'none'; }else if(todo == 'db_bk'){ reply.style.display = ''; reply.style.background = ''; } } }; // 直播模式 function islivemod(){ var name = QueryString('jv'); if (name !== 0){ just_view(decodeURIComponent(name)); var live = $('#livemod'); if (live){ live.textContent = '关闭直播'; live.title = '已开启直播模式,点击取消直播; 点击“复原”按钮可临时查看全部帖子'; live.style.background = '#fffe15'; live.href = location.href.replace(location.search,''); }; if ($('.paginator')[0]){ var next = $$('.paginator a'); for (var i=0,j=next.length; i<j; i++){ next.href += '&jv='+name; } } } }; // 引用回复 // 感谢 NullPointer ,该功能参照了他的 Reply buttons for new Douban 中的格式 function requote(){ var re_f = $('#re_f'), re_text = $('#re_text');// 回复浮层与输入框 var todo = this.name || this.id;// 点击按钮类别 var parent_3 = this.parentNode.parentNode.parentNode; var clickname = xpath('//a[contains(@href,"/people/") and not(./child::img)]', parent_3).snapshotItem(0).textContent;// 楼层发言人名 var rn = (re_text.value == '')?'':'\n'; if (todo == 'db_re'){ var alltext = rn + '@' + clickname + '\n'; }else if(todo == 'db_qt'){ var rehead = parent_3.querySelector('div.author, div.bg-img-green>h4, h3>span.pl, td>span.wrap>h4').textContent.replace(/\s+/g,' ');// 留言头部标题内容 var redoc = window.getSelection().toString() || // 选中内容 parent_3.getElementsByTagName('p')[0].textContent.replace(/\n\s*\n/g, '\n').replace(/^\s{7}/g, '');// 留言正文内容 if (redoc.search(/(-{50,})[\s\S]+\1/g)>-1){ if (confirm('是否删去引文中的引文?')){redoc = redoc.replace(/(-{50,})[\s\S]+\1/g,'').replace(/\n\s*\n/g, '\n');} }; var len = redoc.length; var diylen = GM_getValue('diylen', 500); if (len > diylen){ if (confirm('引文太长,是否省略一部分?')){redoc = redoc.substr(0,diylen)+ '......\n(以上引文省略'+ (len-diylen) +'字)';} }; var sepr = '----------------------------------------------------------'; var alltext = rn+sepr+'\n'+rehead+'\n'+redoc+'\n'+sepr+'\n'; }; re_text.value += alltext; re_f.style.display=''; re_text.focus(); re_text.setSelectionRange(re_text.value.length, re_text.value.length); // 修正chrome版输入框光标定位问题 }; /* ************************ 豆瓣社区处理 ************************ */ // 友邻工具条 function friendsTool(){ if(GM_getValue('friendsTool', true) && $('#db-timeline-hd')){ $('.menu-list')[0].innerHTML += '<li><a title="查看未分组友邻 by豆瓣助手" href="?tag=2">未分组</a></li>'; GM_addStyle('.Friends_Tool_Bar{visibility:hidden;} .mbtr:hover .Friends_Tool_Bar{visibility:visible;}'); // 友邻 var firends = xpath('//li[@class="mbtr" and not(@dbMark)]//a[contains(@href,"/people/") and not(@onclick) and not(@class) and not(contains(@href,"recs?rid=")) and not(../self::*[@class="pl"]) and not(../self::*[@class="indentrec"]) and not(contains(preceding-sibling::text(),"、"))]'); for(var i=0,j=firends.snapshotLength; i<j; i++){ var toolBar = document.createElement('div'), firend = firends.snapshotItem(i), name = firend.href, nname = firend.innerHTML; toolBar.className = 'Friends_Tool_Bar'; toolBar.innerHTML = '<div class="clear"></div><span>\ <a href="'+name.replace('people','book/list')+'">书</a> |\ <a href="'+name.replace('people','movie/list')+'">影</a> |\ <a href="'+name.replace('people','music/list')+'">音</a> |\ <a href="'+name+'miniblogs?type=saying">说</a> |\ <a href="'+name+'miniblogs">广播</a>|\ <a href="'+name+'reviews">评论</a>|\ <a href="'+name+'notes">日记</a>|\ <a href="'+name+'photos">相册</a>|\ <a href="'+name+'recs">推荐</a>|\ <a href="'+name+'groups">小组</a>|\ <a href="'+name+'board">留言板</a>|\ <a href="'+name+'contacts'+'">关注</a>|\ <a href="/doumail/write?to='+name.slice(29,-1)+'">发豆邮</a>\ <a href="javascript:" style="color:#83bf73;" title="点击展开更多"\ onclick="this.target=\'\';\ this.innerHTML=/gt/.test(this.innerHTML)?\'<<<\':\'>>>\';\ var obj=this.parentNode.getElementsByTagName(\'span\')[0];\ obj.style.display=obj.style.display?\'\':\'none\';">>>></a>\ <span style="display:none;">\ <a href="'+name+'event?g=w">活动</a>|\ <a href="'+name+'online">线上</a>|\ <a href="'+name+'offers">二手</a>|\ <a href="'+name+'doulists">豆列</a>|\ <a href="'+name+'minisite">迷你站</a>|\ <a href="'+name+'artist">音乐人</a>|\ <a href="'+name+'hosts">主办方</a>|\ </span>\ <a href="#" onclick="$(\'textarea\').attr(\'value\',\'@\'+\''+nname+'\'+\' \'); $(\'textarea\').focus()">对<span style="color:#83bf73;">'+nname+'</span>说</a>\ </span>'; var theLi = (firend.parentNode.t |
|
2楼#
发布于:2011-02-26 17:49
我是做淘宝的,但是前一阵发现淘宝的订单没办法改价格,弹出来的改价框不显示任何改价信息,IE内核浏览器下正常。
我认为是插件冲突,把所有插件挨个安装后,逐一调试,最终发现是豆瓣助手作祟,不知道和楼主说的有没有关联。 不过豆瓣助手升级后,貌似再没有这样,但我还是担心 |
|
3楼#
发布于:2011-02-26 17:49
我是直接改include,只在豆瓣生效...
|
|
4楼#
发布于:2011-02-26 17:49
這個在douban的小組里也被人說過了,新版本改成了可取消(默認勾選)
其它功能 - 通过在卓越、淘宝商城上买书支持豆瓣助手 |
|