Javascript: программно добавлять слова в URL

Моя проблема:

Я устал добавлять вручную "собаку" каждый раз, когда я использую Google. Я не хочу, чтобы "собака" появлялась в моих результатах поиска.

Например: так должно быть

https://www.google.com/search?q=cat+-dog

https://www.google.com/search?q=baseball+-dog

КОД: Кредит идет в кроу.

dog заменено на -torrent-watch-download

// ==UserScript==
// @name       Tamper with Google Results
// @namespace  http://superuser.com/users/145045/krowe
// @version    0.1
// @description  This just modifies google results to exclude certain things.
// @match      http://*.google.com
// @match      https://*.google.com
// @copyright  2014+, KRowe
// ==/UserScript==


function GM_main () {
    window.onload = function () {
      var targ = window.location;
      if(targ && targ.href && targ.href.match('https?:\/\/www.google.com/.+#q=.+') && targ.href.search("/+-torrent/+-watch/+-download")==-1) {
        targ.href = targ.href +"+-torrent+-watch+-download";
      }
    };
}

//-- This is a standard-ish utility function:
function addJS_Node(text, s_URL, funcToRun, runOnLoad) {
    var D=document, scriptNode = D.createElement('script');
    if(runOnLoad) scriptNode.addEventListener("load", runOnLoad, false);
    scriptNode.type = "text/javascript";
    if(text) scriptNode.textContent = text;
    if(s_URL) scriptNode.src = s_URL;
    if(funcToRun) scriptNode.textContent = '(' + funcToRun.toString() + ')()';
    var targ = D.getElementsByTagName('head')[0] || D.body || D.documentElement;
    targ.appendChild(scriptNode);
}

addJS_Node (null, null, GM_main);

Проблема в том, что вы ДОЛЖНЫ напечатать строку поиска в адресной строке, чтобы это работало. Проблема с вводом в поиске Google напрямую заключается в том, что событие onload не срабатывает. Я хочу, чтобы этот скрипт работал в поиске Google

Есть ли место для улучшения?

Спасибо

1 ответ

Решение

Так как Google работает с хэшем, вы можете попробовать:

window.addEventListener('hashchange', function(ev)
{
  if(! /[#&]q=(?:[^&]*\+)?-dog(?:\+|$)/i.test(location.hash))
    location.hash += '+-dog';
});

Вы можете динамически подготовить RegExp по строке с new RegExp('the expression', modifiers),

Рассмотрите возможность реализации альтернативы для версии запроса Google, которая используется в качестве запасного варианта при большой нагрузке (медленное выполнение скрипта).

Другие вопросы по тегам