как автоматически запускать мой скрипт Greasemonkey каждый раз, когда я открываю страницу

это мой скрипт Greymonkey. Я хочу автоматически запускать его каждый раз, когда я открываю страницу Reddit. Мне нужна функция up_vote_all() { voice_all('стрелка вверх'); }

для запуска на каждой странице автоматически без моего нажатия на пункт меню. Благодарность

   // ==UserScript==
// @name          Reddit Mass Vote
// @namespace     http://reddit.com
// @description   You can up vote or down vote all comments on any page instantly without having to click each arrow. This is mainly to be used against spammers and trolls.
// @include       http://www.reddit.com/*
// @include       http://reddit.com/*
// ==/UserScript==


GM_registerMenuCommand('Up Vote All', up_vote_all);


// From http://snipplr.com/view/1696/get-elements-by-class-name/
function getElementsByClassName(classname, node)  {
  if(!node) node = document.getElementsByTagName("body")[0];
  var a = [];
  var re = new RegExp('\\b' + classname + '\\b');
  var els = node.getElementsByTagName("*");
  for(var i=0,j=els.length; i<j; i++)
    if(re.test(els[i].className))a.push(els[i]);
  return a;
}

// From http://jehiah.cz/archive/firing-javascript-events-properly
function fireEvent(element,event){
  if (document.createEventObject){
    // dispatch for IE
    var evt = document.createEventObject();
    return element.fireEvent('on'+event,evt);
  }
  else {
    // dispatch for firefox + others
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent(event, true, true ); 
    return !element.dispatchEvent(evt);
  }
}


function up_vote_all() {
  vote_all('arrow up');
}


function vote_all(class_name) {
  arrows = getElementsByClassName(class_name);
  for (var i = 0; i < arrows.length; i++) {
      fireEvent(arrows[i], 'click');
  }
}

person SMH_TBZ    schedule 22.12.2013    source источник


Ответы (1)


я нашел это, мне нужно вставить эту команду в начало

document.addEventListener("DOMContentLoaded", function() {
  up_vote_all();
});

это было легко.

person SMH_TBZ    schedule 23.12.2013
comment
Из вики GreaseMonkey: код в пользовательском скрипте Greasemonkey вызывается, когда срабатывает событие DOMContentLoaded (во время захвата события, начиная с GM 0.8.6). Это DOM-событие, реализованное Mozilla, похожее на window.onload. Однако, поскольку он ожидает загрузки только DOM, а не всей страницы (включая изображения, таблицы стилей и т. д.), это происходит раньше. Другими словами, предлагаемое решение, по-видимому, либо вообще не помогает, либо фактически препятствует выполнению чего-либо, поскольку вы в основном говорите onPageLoaded ( addEventListener (onPageLoad)) - который никогда не запустится. - person Tomislav Nakic-Alfirevic; 13.04.2016