1

我正在编写一个 Tampermonkey 脚本,我想用它来重定向youtube.com/*到 YouTube 频道地址。

window.addEventListener ("load", LocalMain, false);

function LocalMain () {
    location.replace("https://www.youtube.com/channel/*");
}

当脚本运行时,它会重定向到频道 URL,但随后会继续运行并不断重定向

4

4 回答 4

2

在重新分配新的 href 之前,您需要检查当前是否 pathname包含channel

function LocalMain () {

     if(!location.pathname.includes('/channel/')) {
        location.replace("https://www.youtube.com/channel/*");
     }
}

另请注意,您不需要窗口加载事件来完成此操作

于 2019-04-12T15:24:37.817 回答
2

您可以检查该位置是否包含“频道”,然后在更改位置之前返回。

window.addEventListener ("load", LocalMain, false);

function LocalMain () {
    if(location.href.indexOf('channel') === -1) return;
    location.replace("https://www.youtube.com/channel/*");
}
于 2019-04-12T15:24:41.543 回答
2

执行这种重定向的标准、更高效执行速度更快的方法是调整脚本的元数据,使其甚至不在重定向到的页面上运行。

此外,// @run-at document-start用于更好的响应。

所以你的脚本会变成这样:

// ==UserScript==
// @name        YouTube, Redirect to my channel
// @match       https://www.youtube.com/*
// @exclude     https://www.youtube.com/channel/*
// @run-at      document-start
// ==/UserScript==

location.replace("https://www.youtube.com/channel/UC8VkNBOwvsTlFjoSnNSMmxw");

此外,对于此类“广谱”重定向脚本,请考虑使用location.assign(),以便您或您的用户可以在过度重定向的情况下恢复历史记录中的原始 URL。

于 2019-04-12T17:35:19.137 回答
0

tampermonkey 是否配置为仅在不在您的频道 URL 上时运行脚本?

如果不是......那么具有讽刺意味的是,您的脚本可能正在执行您想要的操作:在每个页面加载时运行一次。脚本会加载一个新页面。

您可以在脚本中解决此问题,如下所示:

window.addEventListener ('load', localMain, false);

function localMain () {
    if (location.href.startsWith('https://www.youtube.com/channel/')) {
        return; // exit
    }
    location.replace('https://www.youtube.com/channel/*');
}
于 2019-04-12T15:26:37.590 回答