Greasemonkey: добавление параметров в URL


Я хотел бы написать Greasemonkey / userscript, который автоматически добавляет .compact к URL, начинающимся с https://pay.reddit.com/ таким образом, он автоматически перенаправляет меня на мобильную версию.

Я рассматривал похожие пользовательские скрипты, особенно этот: https://userscripts.org/scripts/review/112568 пытаюсь понять, как редактировать шаблон замены, но мне не хватает навыков в этой области.

Как написать сценарий greasemonkey, который перенаправляет меня с https://pay.reddit.com/* на https://pay.reddit.com/*.compact ?

Спасибо

2 4

2 ответа:

Сценарий должен делать следующие вещи:

  1. определите, есть ли текущий URL-адрес уже на компактном сайте.
  2. при необходимости загрузите компактную версию страницы.
  3. остерегайтесь" якорных "URL-адресов (они заканчиваются "фрагментами" или "хэшами" (#...) ) и отчитаться за них.
  4. держите нежелательные страницы вне истории браузера, чтобы кнопка назад работала хорошо. Будут запоминаться только URL-адреса .compact.
  5. запустив в document-start, скрипт может дать лучший результат. производительность в данном случае.

С этой целью работает следующий скрипт:

// ==UserScript==
// @name        _Reddit, ensure compact site is used
// @match       *://*.reddit.com/*
// @run-at      document-start
// @grant       none
// ==/UserScript==

var oldUrlPath  = window.location.pathname;

/*--- Test that ".compact" is at end of URL, excepting any "hashes"
    or searches.
*/
if ( ! /\.compact$/.test (oldUrlPath) ) {

    var newURL  = window.location.protocol + "//"
                + window.location.host
                + oldUrlPath + ".compact"
                + window.location.search
                + window.location.hash
                ;
    /*-- replace() puts the good page in the history instead of the
        bad page.
    */
    window.location.replace (newURL);
}

Пример сценария, который вы показали, использует регулярное выражение для управления расположением окна:

replace(/^https?:\/\/(www\.)?twitter.com/, 'https://mobile.twitter.com');
Неудивительно, что это заменяет https://www.twitter.com и http://twitter.com и т. д. с https://mobile.twitter.com.

Ваша ситуация немного отличается, потому что вы хотите добавить строку к вашему url, если она соответствует некоторому регулярному выражению. Попробуйте:

var url = window.location.href;
var redditPattern = /^https:\/\/pay.reddit.com\/.*/;
// Edit: To prevent multiple redirects:
var compactPattern = /\.compact/;
if (redditPattern.test(url)
    && !compactPattern.test(url)) {
    window.location.href = url + '.compact';
}

См.: http://jsfiddle.net/RichardTowers/4VjdZ/3 для тестового случая.