Как заставить скрипт перенаправлять только один раз при каждой загрузке соответствующей страницы? - PullRequest
1 голос
/ 12 апреля 2019

Я пишу скрипт Tampermonkey, который хочу использовать для перенаправления с youtube.com/* на адрес канала YouTube.

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

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

Когда скрипт выполняется, он перенаправляет на URL канала, но затем сохраняетработает и непрерывно перенаправляет .

Ответы [ 4 ]

2 голосов
/ 12 апреля 2019

Стандартный, намного более эффективный и намного более быстродействующий способ сделать такой вид перенаправления состоит в настройке метаданных сценария даже не запускаться на перенаправленной странице.

Кроме того, используйте // @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-адрес в истории в случае чрезмерного переадресации.

2 голосов
/ 12 апреля 2019

Вы можете проверить, содержит ли местоположение «канал», а затем вернуться, прежде чем изменить местоположение.

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

function LocalMain () {
    if(location.href.indexOf('channel') === -1) return;
    location.replace("https://www.youtube.com/channel/*");
}
2 голосов
/ 12 апреля 2019

Вам необходимо проверить, включает ли текущий pathname значение channel, прежде чем переназначить новый href

function LocalMain () {

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

Также обратите внимание, что вам не нужно окно загрузки события, чтобы завершить это

0 голосов
/ 12 апреля 2019

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/*');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...