Youtube Middle Click Search

Middle clicking the search on youtube opens the results in a new tab

当前为 2015-10-28 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Youtube Middle Click Search
  3. // @version 1.3.8
  4. // @description Middle clicking the search on youtube opens the results in a new tab
  5. // @match *://www.youtube.com/*
  6. // @require https://greasyfork.org/scripts/5679-wait-for-elements/code/Wait%20For%20Elements.js?version=22195
  7. // @namespace https://greasyfork.org/users/649
  8. // @grant GM_openInTab
  9. // ==/UserScript==
  10. console.log('started YMCS');
  11. var process = function(element) {
  12. console.log('found search button');
  13. // setup references
  14. var oldButton = document.querySelector("#search-btn"),
  15. button = document.createElement('button'),
  16. input = document.querySelector('#masthead-search-term'),
  17. initSearch = input.value.trim();
  18. // imitate old button style
  19. button.appendChild(oldButton.firstChild.cloneNode(true));
  20. button.firstChild.style.margin = '0 25px';
  21. button.style.padding = '0';
  22. button.className = oldButton.className;
  23. button.setAttribute('type', 'button');
  24. // insert new button and remove old
  25. oldButton.parentNode.insertBefore(button, oldButton);
  26. oldButton.remove();
  27. // bind events
  28. button.addEventListener('mousedown', function(e) {
  29. if(e.button === 1) {
  30. e.preventDefault();
  31. }
  32. }, false);
  33. document.addEventListener('click', function(e) {
  34. if(button.isEqualNode(e.target)) {
  35. e.preventDefault();
  36. if (input.value.trim() === '' || input.value.trim() === initSearch && e.button !== 1) return false;
  37. var url = location.origin + '/results?search_query=' + encodeURIComponent(input.value);
  38. if(e.button === 1) {
  39. console.log('opening');
  40. GM_openInTab(url, false);
  41. } else if(e.button === 0) {
  42. window.location.href = url;
  43. }
  44. return false;
  45. }
  46. });
  47. };
  48.  
  49. waitForElems('#search-btn', process, true);