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

时间:2019-04-12 15:17:42

标签: javascript greasemonkey userscripts tampermonkey greasemonkey-4

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

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

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

脚本运行时,它会重定向到频道URL,然后继续运行并连续重定向

4 个答案:

答案 0 :(得分:2)

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

function LocalMain () {

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分: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。

答案 3 :(得分: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/*');
}