为什么此代码不重定向到此 URL?



我做了一个脚本来自动重定向到英语维基百科和维基词典。但是,在我向维基词典添加功能后,我的脚本不再起作用。

// @match        https://*.wikipedia.org/*
// @exclude      https://en.wikipedia.org/*
// Change the above to fit your language
// @match        https://*.wiktionary.org/*
// @exclude      https://en.wiktionary.org/*
// Change the above to fit your language
// Now works with wiktionary!
// @grant        none
// @icon         https://i.imgur.com/A75OqHr.png
// ==/UserScript==
if (location.hostname == "*.wikipedia.org"){
location.hostname = "en.wikipedia.org" //change me to your language
}
if (location.hostname == "*.wiktionary.org"){
location.hostname = "en.wiktionary.org" //change me to your language
}

*注意:出于反人肉搜索的目的,我省略了一些元数据。

这是你要找的东西吗?

window.location.href = "URL_YOU_WANT_TO_REDIRECT_TO";

请检查一次您的"如果"条件是否正常运行,如果这不是您想要的,请告诉我

==不进行模式匹配。所以它不会帮助你。

如果要包含 wikipedia.org 下的所有子域,只需使用String include(( 方法即可。你可以在这里阅读它。

因此,即使没有模式匹配,也可以通过在字符串上使用include((方法来解决此问题,如下所示:

if (location.hostname.includes("wikipedia.org")){
location.href = "en.wikipedia.org" //change me to your language
}
if (location.hostname.includes("wiktionary.org")){
location.href = "en.wiktionary.org" //change me to your language
}

您正在检查内容为*.wikipedia.org*.wiktionary.org的字符串。您打算使用的逻辑似乎也会导致无限循环。

您可以利用本例中的不等于运算符!==来防止这种情况,并且也只检查您希望重定向的特定站点。

const redirectToCorrectPage = url => location.hostname !== url ? location.hostname = url : null;
redirectToCorrectPage("en.wikipedia.org")
redirectToCorrectPage("en.wiktionary.org")

一旦你有了以下内容:

// @match        https://*.wikipedia.org/*
// @exclude      https://en.wikipedia.org/*

无需再次检查location.hostname,因为上述将在除en.wikipedia.org以外的所有wikipedia.org子域(以及https://wikipedia.org/(上运行。

现在,基本的重定向器用户脚本如下所示:

// ==UserScript==
// @name          My Script
// @match         https://*.wikipedia.org/*
// @exclude       https://en.wikipedia.org/*
// @run-at        document-start
// ==/UserScript==
location.hostname = 'en.wiktionary.org';

@run-at document-start可以防止不必要地加载不需要的页面。

最新更新