Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.05.2012, 20:18
Аватар для join
Профессор
Отправить личное сообщение для join Посмотреть профиль Найти все сообщения от join
 
Регистрация: 05.03.2012
Сообщений: 477

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

Пробовал убить все фрэймы на странице = все получилось, расширение грузится как надо, все работает.
Как сделать без убирания фрэймов?
Если вопрос поднимался - дайте ссыль.
Искал по форуму - пока ничего не нашел.
Ответить с цитированием
  #2 (permalink)  
Старый 26.05.2012, 20:39
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

window == window.top

будет true, если это верхнее окно, и false, если фрейм
Ответить с цитированием
  #3 (permalink)  
Старый 26.05.2012, 20:53
Аватар для join
Профессор
Отправить личное сообщение для join Посмотреть профиль Найти все сообщения от join
 
Регистрация: 05.03.2012
Сообщений: 477

Сообщение от Gvozd
будет true, если это верхнее окно, и false, если фрейм
Помогло, спасибо.
Ответить с цитированием
  #4 (permalink)  
Старый 28.05.2012, 10:10
Аватар для join
Профессор
Отправить личное сообщение для join Посмотреть профиль Найти все сообщения от join
 
Регистрация: 05.03.2012
Сообщений: 477

расширение запускается при помощи 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 с (офф. сайта Опера) имеет похожий косяк с фрэймами.
Ответить с цитированием
  #5 (permalink)  
Старый 28.05.2012, 11:13
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от join
что не так делаю?
а)зачем-то объявляете глобальную переменную G
Полагаю, что ее уже кто-то использует
б) гворит е об одном коде, а скидываете другой
сперва вы говорите об opera.extension.onmessage = function(e){ myFunc() };, а затем вы показываете как вы объявляете и не вызываете myFunk()
Вы уж сначала разберитесь со своим кодом, что вы в нем делаете, и где вы в нем опечатываетесь
Ответить с цитированием
  #6 (permalink)  
Старый 28.05.2012, 11:54
Аватар для join
Профессор
Отправить личное сообщение для join Посмотреть профиль Найти все сообщения от join
 
Регистрация: 05.03.2012
Сообщений: 477

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




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

Последний раз редактировалось join, 28.05.2012 в 11:56.
Ответить с цитированием
  #7 (permalink)  
Старый 28.05.2012, 12:43
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от join
if(w){ alert('мимо') }
выполняется для главного окна
Сообщение от join
else if(!w){ myFunk(); }
выполняется для фрейма(кстати, if тут лишний)

таким образом, ваша функция myFunk() должна выполниться в каждом фрейме
Ответить с цитированием
  #8 (permalink)  
Старый 28.05.2012, 13:04
Аватар для join
Профессор
Отправить личное сообщение для join Посмотреть профиль Найти все сообщения от join
 
Регистрация: 05.03.2012
Сообщений: 477

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(это чтобы увидеть работу скрипта в узком фрайме)
Зайдите на хабрахабр, и запустите расширение.
Должно появиться синий блок во фрайме справа.
Мой код, написанный в теме - это лишь попытки изменить проблему, а не готовые решения.
Ответить с цитированием
  #9 (permalink)  
Старый 28.05.2012, 13:15
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от join
Гвоздь, если интересно разобраться:
Да не, не сильно. Это ж ваша задача
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Юзерскрипт для Opera, не работает под windows young Opera, Safari и др. 1 04.11.2011 00:48
Доступ к DOM из Opera Extension injected script kirller Events/DOM/Window 0 13.10.2011 12:26