Подтвердить что ты не робот

Запустить Greasemonkey script только один раз на загрузку страницы?

Если вы создаете Greasemonkey script с @include * и переходите на сайт, такой как youtube, он запускает script 20 + раз при каждом обновлении. Это на Firefox, не уверен в Chrome.
Есть ли способ предотвратить это?

4b9b3361

Ответ 1

Во-первых, вы, вероятно, не хотите, чтобы script запускался в iFrames.
Вы можете заблокировать это с помощью директивы @noframes, которая теперь работает как в Greasemonkey, так и в Tampermonkey по состоянию на октябрь 2014 года.

Для более старых версий или для двигателей script, которые не поддерживают @noframes, вы можете использовать этот код сразу после блока метаданных:

if (window.top != window.self)  //don't run on frames or iframes
{
    //Optional: GM_log ('In frame');
    return;
}


Во-вторых, вы можете подождать и запустить свой GM-код один раз, при загрузке страницы. Оберните все в main() и вызовите его в событии load, например:

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

function LocalMain () {
    // Your code goes here.
}


В-третьих, вы можете исключить сайты или страницы, добавив директивы // @exclude в блок метаданных.

В целом, лучше всего избегать универсальных включенных сценариев GM, если это возможно.

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

Ответ 2

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

Если нет, вы устанавливаете переменную и запускаете свою функцию, если да ничего не делают.

Как хранить постоянные переменные: GM_setValue