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 для тестового случая.