最近,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);
}