饭否-解决Opera Mobile Classic转发消息漏字问题

解决 Opera Mobile Classic for Android 在 m.fanfou.com 上转发消息时在某些情况下缺字的问题

  1. // ==UserScript==
  2. // @name 饭否-解决Opera Mobile Classic转发消息漏字问题
  3. // @version 1.0.3
  4. // @author HackMyBrain
  5. // @description 解决 Opera Mobile Classic for Android 在 m.fanfou.com 上转发消息时在某些情况下缺字的问题
  6. // @include http://m.fanfou.com/*
  7. // @namespace https://greasyfork.org/users/2844
  8. // ==/UserScript==
  9.  
  10.  
  11. (function (){
  12. //获取目标消息内容并保存
  13. function saveFWContent(e){
  14. if ( /\/msg\.forward\//.test(e.target.href) && e.target.innerHTML == '转发' ){
  15. var target_post, author;
  16. var post_content, postChildNode;
  17. if ( /^\/photo\//.test(location.pathname) ) {
  18. author = document.querySelector('h2 > a').textContent;
  19. target_post = document.querySelector('span.t').parentElement.firstChild.textContent;
  20. post_content = author + ' ' + target_post;
  21. }
  22. else {
  23. target_post = e.target.parentElement.parentElement;
  24. if ( /^\/statuses\//.test(location.pathname) ) { // 消息 statuses 页
  25. author = document.querySelector('b > a');
  26. post_content = '';
  27. postChildNode = author.parentElement;
  28. // author = document.querySelector('b > a').textContent;
  29. // target_post = document.querySelector('b > a').parentElement.textContent;
  30. // post_content = target_post;
  31. }
  32. else { // 首页、别人的空间页、自己的 mentions 页
  33. post_content = ( target_post.getElementsByClassName('p').length != 0 || /^\/mentions($|\/)/.test(location.pathname) )? '' : document.title.replace(/饭否 \| /,'') + ' ';
  34. // 在单一饭er消息页上需要在获取的消息内容开头补充昵称(昵称从 document.tilte 获取)
  35. postChildNode = target_post.firstChild;
  36. }
  37. while ( postChildNode.className != 'stamp' && postChildNode.className != 't') {
  38. console.log(postChildNode.data.textContent)
  39. post_content += (!postChildNode.title)? postChildNode.textContent : postChildNode.title;
  40. postChildNode = postChildNode.nextSibling;
  41. }
  42. var mystery_space = new RegExp(decodeURIComponent('%C2%A0'), g); // statuses 页面的消息中如果有图片, 会有一个神秘空格导致at不到
  43. post_content = post_content.replace(mystery_space, '\x20');
  44. }
  45. var mes_content = '转@' + post_content;
  46. sessionStorage.setItem('_fw_fixer_', mes_content);
  47. }
  48. // e.preventDefault();
  49. }
  50. //私信框填入消息内容 & 光标定位于私信框开端(光标定位在Opera Mobile Classic下不成功)
  51. function fillFWContent() {
  52. if ( /\/msg\.forward\//.test(location.pathname) && !! sessionStorage.getItem('_fw_fixer_') ) {
  53. var textarea = document.getElementsByTagName('textarea')[0];
  54. textarea.value = ' ' + sessionStorage.getItem('_fw_fixer_'); //填写消息内容并在开头自动添加空格
  55. sessionStorage.removeItem('_fw_fixer_');
  56. textarea.focus();
  57. textarea.setSelectionRange(0,0); //光标定位于输入框开端
  58. }
  59. }
  60.  
  61. document.addEventListener('click', saveFWContent, false);
  62. fillFWContent();
  63. })();