Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Tampermonkey и frames, запуск скрипта одн раз (https://javascript.ru/forum/misc/48219-tampermonkey-i-frames-zapusk-skripta-odn-raz.html)

VitAl2013 25.06.2014 09:52

Tampermonkey и frames, запуск скрипта одн раз
 
Подскажите способ запустить скрипт один раз, но чтоб работал на всей территории сайта. Пишу руссификатор+улучшение подачи информации - доступ нужен ко всему что на экране в окне.
Если использовать @noframes или @exclude, то он просто перестаёт видеть эти фреймы и соотвтетсвенно ничего в них не меняет выдавая в консоль:
Uncaught TypeError: Cannot read property 'frames' of undefined

Найденные способы в интернете:
if (window.top != window.self)  //don't run on frames or iframes
{
    //Optional: GM_log ('In frame');
    return;
}

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

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

ничего не останавливают, скрипт прогружается 8 раз, потом как происходило всё 8 раз так и происходит - даже забиндить кнопку нельзя по нормальному - вешается 8 лиссенеров и все выполняются при нажатии. Не знаю как объяснить - может каждое окошко мнит себя главным и отсылает событие load как главное, а tampermonkey ведётся на это.

Есть ли ещё способы?

jsnb 25.06.2014 11:18

Так надо, чтобы скрипт не запускался во фреймах? Так @noframes именно это и делает. И доступ ко фреймам остается с основной страницы обычным. Первый из найденных способов тоже должен работать, он конечно загрузку самого скрипта не остановит, то преревет его выполнение, если он был запущен во фрейме.

VitAl2013 25.06.2014 12:12

Надо чтоб он там повторно не запускался. У меня не работает - ошибку выплёвываемую в консоль показал - теряет фреймы. Вот на таком лапы к верху делает.
var menu=window.top.frames["navframe"].frames["menu"].document;

Если нет этого (@noframes) параметра, то всё нормально... срабатывает, хоть и криво.

VitAl2013 10.07.2014 16:50

при
// @noframes

сам фреймы видны, но никаких их внутренностей нет
при
if (window.top != window.self)

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

каждый фрейм мнит себя LocalMain и запускает всё подряд

Ниужели нет нормального решения?


Часовой пояс GMT +3, время: 04:06.