如何在每次加载适当的页面时仅对脚本进行一次重定向?

问题描述 投票:1回答:4

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

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

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

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

javascript greasemonkey userscripts tampermonkey greasemonkey-4
4个回答
2
投票

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

function LocalMain () {

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

另请注意,您无需窗口加载事件即可完成此操作


2
投票

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

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

function LocalMain () {
    if(location.href.indexOf('channel') === -1) return;
    location.replace("https://www.youtube.com/channel/*");
}

2
投票

执行此类重定向的标准,更高效和更快速的执行方式是将脚本的metadata调整为甚至不在重定向页面上运行。

另外,使用// @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。


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/*');
}
© www.soinside.com 2019 - 2024. All rights reserved.