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 ответа:
Сценарий должен делать следующие вещи:
- определите, есть ли текущий URL-адрес уже на компактном сайте.
- при необходимости загрузите компактную версию страницы.
- остерегайтесь" якорных "URL-адресов (они заканчиваются "фрагментами" или "хэшами" (
#...
) ) и отчитаться за них.- держите нежелательные страницы вне истории браузера, чтобы кнопка назад работала хорошо. Будут запоминаться только URL-адреса
.compact
.- запустив в
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 для тестового случая.