exmail.qq.com_view_plus

自制邮件聚合模式,吊打会话模式,让脚本改变世界(已支持腾讯企业邮箱)

当前为 2019-02-28 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name exmail.qq.com_view_plus
  3. // @description 自制邮件聚合模式,吊打会话模式,让脚本改变世界(已支持腾讯企业邮箱)
  4. // @version 1.6
  5. // @namespace https://wanyaxing.com/blog/20190120150811.html
  6. // @author wyx@wanyaxing.com
  7. // @include https://exmail.qq.com/*
  8. // ==/UserScript==
  9.  
  10.  
  11. // 腾讯企业邮箱-聚合模式
  12. if (document.getElementById('frm')) {
  13. function selectText(element) {
  14. var selection = window.getSelection();
  15. selection.setBaseAndExtent(element, 0, element, 1);
  16. }
  17.  
  18. function watchTdTime(_this, tdTime) {
  19. if (!tdTime)
  20. {
  21. var str = _this.innerText;
  22. if (str.indexOf('前')>0) {
  23. var num = parseInt((str.replace(/^(\d+?)[^\d]*$/,'$1'))) * 1000;
  24. if (str.indexOf('分钟前')>0) {
  25. num = num * 60;
  26. } else if (str.indexOf('小时前')>0) {
  27. num = num * 60 * 60;
  28. }
  29. var now = (new Date()).getTime();
  30. tdTime = now - num;
  31. }
  32. }
  33. if (tdTime) {
  34. var time_now = new Date();
  35. var t_over = time_now-tdTime ;
  36. var timelabel,nextTime;
  37. if (t_over>24*60*60000) {
  38. timelabel = (parseInt(t_over/60/60000/24))+'天'+parseInt((t_over-parseInt(t_over/60/60000/24)*60*24*60000)/60/60000)+'小时前';
  39. } else if (t_over>=60*60000) {
  40. timelabel = (parseInt(t_over/60/60000))+'小时前';
  41. } else if (t_over>60000) {
  42. timelabel = parseInt(t_over/60000)+'分钟前';
  43. nextTime = 60000;
  44. }else {
  45. timelabel = parseInt(t_over/1000)+'秒前';
  46. nextTime = 1000;
  47. }
  48. _this.innerHTML = '<div>'+timelabel+'</div>';
  49. if (nextTime) {
  50. // console.log(nextTime,_this.innerHTML);
  51. setTimeout(function(){
  52. watchTdTime(_this, tdTime)
  53. },nextTime);
  54. }
  55. }
  56. }
  57.  
  58. function resetAsStoryLines() {
  59. var graytipNode = document.querySelector('.graytip');
  60. if (graytipNode && graytipNode.innerText.indexOf('会话模式')>=0) {
  61. graytipNode.style.cssText = 'display:none;'
  62. }
  63.  
  64. // 时间表头迁移
  65. var timeTd = document.querySelector('#frm table').querySelector('tr').lastChild.previousSibling;
  66. timeTd.parentNode.insertBefore(timeTd,timeTd.previousSibling);
  67.  
  68. var items = {};
  69. document.getElementById('frm').querySelectorAll('.toarea>table').forEach(function(child){
  70. var formNode = child.querySelector('.tl nobr');
  71. var subjectNode = child.querySelector('.gt u');
  72. var descNode = child.querySelector('.txt_hidden>b');
  73. var tagDivNode = child.querySelector('.TagDiv');
  74.  
  75. var formText = formNode.innerText;
  76. formText = formText.replace(/^[\s::\-]*(.*?)[\s::\-]*$/g,'$1');
  77.  
  78. // 主题提炼(移除辅助词如转发回复啥的
  79. var subjectText = subjectNode.innerText;
  80. subjectText = subjectText.replace(/(Re|转发|Fw|回复|发信方已撤回邮件)[:: ]*/g,'');
  81. subjectText = subjectText.replace(/(\d+-\d+-\d+|\d+\/\d+\/\d+|\d+月\d+日)/g,'');
  82. subjectText = subjectText.replace(/(【.*?】|「.*?」|\[.*?\]|[\((]\s*?[\))])/g,'');
  83. subjectText = subjectText.replace(/^.{0,5}[::]/g,'');
  84. subjectText = subjectText.replace(/^[\s::\-]*(.*?)[\s::\-]*$/g,'$1');
  85. if (subjectText == '') {
  86. subjectText = subjectNode.innerText;
  87. }
  88.  
  89. // 简情处理(移除签名信息等)
  90. var descText = descNode.innerText;
  91. descText = descText.replace(/---+.*/g,'');
  92. descText = descText.replace(/原始邮件\s.*/g,'');
  93. descText = descText.replace(/(From|Sender|发件人)[::].*/g,'');
  94. descText = descText.replace(new RegExp('姓名:'+formText + '\\s.*','g'),'');
  95. descText = descText.replace(/在\s\d+年\d+月\d+日,.*?写道.*/g,'');
  96. descText = descText.replace(/\s[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+\s*$/g,'');
  97. descText = descText.replace(/^[\s::\-]*(.*?)[\s::\-]*$/g,'$1');
  98. descNode.innerHTML = descText;
  99.  
  100.  
  101. // 新窗口打开
  102. child.querySelector('.ci .cir').style.cssText = 'position: absolute;width: 90%;background: none;';
  103. // 时间栏 前移
  104. var dtNode = child.querySelector('.dt');
  105. dtNode.style.cssText = 'color:gray';
  106. dtNode.parentNode.insertBefore(dtNode,dtNode.previousSibling);
  107. watchTdTime(dtNode);//动态更新时间栏
  108.  
  109. if (subjectNode.innerText.indexOf('发信方已撤回邮件:')>=0) {
  110. descNode.innerHTML = subjectNode.innerText;
  111. descNode.style.cssText = 'text-decoration: line-through;';
  112. }
  113.  
  114. if (!items[subjectText]){
  115. subjectNode.innerHTML = subjectText;
  116. child.style.cssText = 'padding-top:36px';
  117. if (tagDivNode.firstChild) {
  118. tagDivNode.insertBefore(subjectNode,tagDivNode.firstChild);
  119. } else {
  120. tagDivNode.appendChild(subjectNode);
  121. }
  122. subjectNode.style.cssText = 'margin: 0 14px;';
  123. child.ondblclick = function(){
  124. selectText(subjectNode);
  125. return false;
  126. }
  127. tagDivNode.style.cssText = 'position: absolute;left: -250px;bottom: 28px;';
  128. tagDivNode.parentNode.style.cssText = 'position: relative;overflow: visible;pointer-events: none;';
  129.  
  130. items[subjectText] = child;
  131. } else {
  132. subjectNode.style.cssText = 'display: none;';
  133. tagDivNode.style.cssText = 'display: none;';
  134. items[subjectText].parentNode.insertBefore(child,items[subjectText].nextSibling);
  135. items[subjectText] = child;
  136. }
  137. formNode.style.cssText = 'float: right;color:gray;';
  138. });
  139. // console.log(items);
  140. }
  141.  
  142. setTimeout(function(){
  143. resetAsStoryLines();
  144. },1);
  145. }

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址