Violentmonkey 的脚本可以自动在所有 wikia URL 末尾添加一些内容吗?

Violentmonkey 的脚本可以自动在所有 wikia URL 末尾添加一些内容吗?

最近,Wikia/Fandom 发布了其网站的新设计,看起来非常糟糕,他们正在慢慢将其强制作为所有 wiki 的默认皮肤。用户仍然可以登录并选择 Oasis 皮肤,但这只会在他们登录的情况下改变网站的外观。一旦用户注销,或者他们只是在浏览 wiki 而不需要登录,他们就会被困在新设计中。通过在 Wikia 页面的 URL 末尾添加 ?useskin=oasis 可以轻松解决这个问题,但每次转到新页面时都必须这样做。

我需要一个 Violentmonkey/Tampermonkey 脚本,它会自动将 ?useskin=oasis 添加到所有 wikia 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

窗口.位置.路径名不包含查询字符串,因此您会陷入无限循环。

是一个 USVString,包含开头的“/”,后跟 URL 的路径,不包括查询字符串或片段。

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

永远找不到您要查找的内容。您可以改为检查 location.search,然后根据需要重建 URL。另请注意,如果您要转换的 URL 已经包含查询字符串,这将导致问题

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

因为这样,您生成的新 URL 中就会有 2 个 ?。如果您想保留旧查询字符串,请注意这一点,或者直接删除它。

这应该有效

// ==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);
}

相关内容