Скрипт для Violentmonkey, который автоматически добавляет что-то в конец всех URL-адресов вики?

Недавно Wikia/Fandom выпустила новый дизайн своего сайта, который выглядит совершенно ужасно, и они постепенно делают его скином по умолчанию для всех своих вики. Пользователи по-прежнему могут войти в систему и выбрать скин Oasis, но это меняет внешний вид сайта только до тех пор, пока они вошли в систему. В тот момент, когда пользователь выходит из системы или просто просматривает вики без необходимости входа в систему. в, они застряли в новом дизайне. Это можно легко исправить, добавив ?useskin=oasis в конец URL-адреса страницы Wikia, но это нужно делать каждый раз, когда вы переходите на новую страницу.

Мне нужен скрипт для Violentmonkey/Tampermonkey, который автоматически добавит ?useskin=oasis в конец всех URL-адресов викии, чтобы я мог использовать скин Oasis, даже если я не вошел в систему.

Я попытался изменить старый сценарий Youtube Polymer Disable, поскольку он выполнял аналогичное действие, но это не сработало. И я попробовал это, которое добавляет ?useskin=oasis к URL-адресу, но продолжает добавлять его неоднократно и перезагружать страницу.

      // ==UserScript==
// @name        Oasis Wikia
// @match       *://*.fandom.com/*
// @run-at      document-start
// @grant       none
// ==/UserScript==

   var oldUrlPath  = window.location.pathname;
   */
   if ( ! /\?useskin=oasis$/.test (oldUrlPath) ) {

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

1 ответ

window.location.pathname не включает строку запроса, поэтому вы получаете бесконечный цикл.

Это USVString, содержащий начальный символ «/», за которым следует путь URL-адреса, не включая строку запроса или фрагмент.

      var oldUrlPath  = window.location.pathname; 
! /\?useskin=oasis$/.test (oldUrlPath) 

никогда не найдете то, что ищете. Вместо этого вы можете проверить location.search, а затем перестроить URL-адрес, если это необходимо. Также обратите внимание: если конвертируемый URL-адрес уже содержит строку запроса, это вызовет проблемы.

      + window.location.pathname + "?useskin=oasis"
+ window.location.search

потому что у тебя будет 2? в полученном новом URL-адресе. Если вы хотите сохранить старую строку запроса, имейте это в виду или просто удалите ее.

Это должно сработать

      // ==UserScript==
// @name        Oasis Wikia
// @match       *://*.fandom.com/*
// @run-at      document-start
// @grant       none
// ==/UserScript==

if ( ! /useskin=oasis/.test(window.location.search) ) {

  var newURL  = window.location.protocol + "//"
            + window.location.host
            + window.location.pathname + "?useskin=oasis"
            + window.location.search.replace('?', '&')
            + window.location.hash;
  
  /*-- replace() puts the good page in the history instead of the
      bad page.
  */
  window.location.replace (newURL);
}
Другие вопросы по тегам