Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   Не пустить юзерСкрипт во фрайм (Opera Extension). (https://javascript.ru/forum/css-html-browser/28610-ne-pustit-yuzerskript-vo-frajjm-opera-extension.html)

join 26.05.2012 20:18

Не пустить юзерСкрипт во фрайм (Opera Extension).
 
Здравствуйте.
Вопрос о расширениях в опера(opera Extension):
Некоторые расширения работают с загружаемой страницей.
Иногда, скрипты расширений, призванные делать что=то на странице
,со страницей, грузятся прямо во фрэймы, расположенный на странице( например во frame ad.adriver.ru на хабрахабре),а не поверх фрэйма.
Загружаясь во фрэйм - расширение не работает со страницей, а тихо курит во фрэйме, невыполняя своих задач на загруженной странице.

Пробовал убить все фрэймы на странице = все получилось, расширение грузится как надо, все работает.
Как сделать без убирания фрэймов?
Если вопрос поднимался - дайте ссыль.
Искал по форуму - пока ничего не нашел.

Gvozd 26.05.2012 20:39

window == window.top

будет true, если это верхнее окно, и false, если фрейм

join 26.05.2012 20:53

Цитата:

Сообщение от Gvozd
будет true, если это верхнее окно, и false, если фрейм

Помогло, спасибо.

join 28.05.2012 10:10

расширение запускается при помощи opera.extension.onmessage = function(e){ myFunc() };

Как вычислить не фрэйм внутри onmessage?

делаю так:

var G = window === window.top;
  opera.extension.onmessage = function(e){
   if(G){ alert('грузим скрипт') }
    else if(!G){ alert('стоп') }
  }
  function myFunk(){ //babax }


что не так делаю?
Без кнопки запуска( opera.extension.onmessage ),
все грузится как положено, браузер сам отсортировывает фрэймы, загружая скрипт в основное окно, минуя фрэймы и прочие неприятности.


PS:: расширение rewriteIt с (офф. сайта Опера) имеет похожий косяк с фрэймами.

Gvozd 28.05.2012 11:13

Цитата:

Сообщение от join
что не так делаю?

а)зачем-то объявляете глобальную переменную G
Полагаю, что ее уже кто-то использует
б) гворит е об одном коде, а скидываете другой
сперва вы говорите об opera.extension.onmessage = function(e){ myFunc() };, а затем вы показываете как вы объявляете и не вызываете myFunk()
Вы уж сначала разберитесь со своим кодом, что вы в нем делаете, и где вы в нем опечатываетесь

join 28.05.2012 11:54

opera.extension.onmessage = function(e){
  var w = window == window.top; // return false;
   if(w){ alert('мимо') }
    else if(!w){ myFunk(); }
  }
  function myFunk(){  }




Наверно это косяк оперы.Если не понятно в чем суть вопроса, скачайте
расширение rewriteIt (rewriteit), зайдите на хабру и попытайтесь его запустить.
Расширение залезет во фрайм.
Пытаюсь обойти это.

Gvozd 28.05.2012 12:43

Цитата:

Сообщение от join
if(w){ alert('мимо') }

выполняется для главного окна
Цитата:

Сообщение от join
else if(!w){ myFunk(); }

выполняется для фрейма(кстати, if тут лишний)

таким образом, ваша функция myFunk() должна выполниться в каждом фрейме

join 28.05.2012 13:04

opera.extension.onmessage = function(event) {
	var myVar = window == window.top; //return FALSE, а не true
	    alert(myVar);
 }

Гвоздь, если интересно разобраться:
скачайте маленькое расширение, выше дал ссылку(11 кб).

Чтобы увидеть работу rewriteIt во фрэме , измените в расширении:
include -> base.js -> maindiv.style.left = '300px';
заменить на 30px(это чтобы увидеть работу скрипта в узком фрайме)
Зайдите на хабрахабр, и запустите расширение.
Должно появиться синий блок во фрайме справа.
Мой код, написанный в теме - это лишь попытки изменить проблему, а не готовые решения.

Gvozd 28.05.2012 13:15

Цитата:

Сообщение от join
Гвоздь, если интересно разобраться:

Да не, не сильно. Это ж ваша задача


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