Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> frames undefined, в начале функции 
:(
    Опции темы
4epT
Дата 27.2.2012, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: нет
Всего: 3



Всем привет. Пишу скрипт под плагин greasemonkey (для мозилы) и Tampermonkey (для google chrome). Для мозилы сделал все работет идеально. А вот под chrome проблемы.

Суть скрипта в следующем - добавить свою кнопку ко всем прикрепленным файлам в письме (речь о GMail).

У них сделано так, что окно с текстом письма это iFrame, я пытаюсь получить к нему доступ через frames[3], в мозиле работает, в хроме не успевает (в хроме уже только после полной загрузки страницы, написав в консоли frame[3], будет видин DOMWindow).

Подскажите какие могут быть варинты испаравления этой ситуации ? в какую сторону смотреть ?

Код очень запутанный и разобраться в нем будет крайне сложно, поэтому не вижу смысла его постить. Буду рад любым советам =)

Это сообщение отредактировал(а) 4epT - 27.2.2012, 17:40
PM MAIL   Вверх
Amphiluke
Дата 27.2.2012, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Ну так вы запускайте свой код после окончания загрузки страницы. smile:
PM   Вверх
4epT
Дата 27.2.2012, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: нет
Всего: 3



Каким образом ?

У меня код обернут в $(document).ready

результат тот же =(
PM MAIL   Вверх
Amphiluke
Дата 27.2.2012, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Ну, к примеру, так:
Код

$(window).bind("load", function() {
    // your code
});

PM   Вверх
4epT
Дата 27.2.2012, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: нет
Всего: 3



Цитата(Amphiluke @ 27.2.2012,  18:35)
Ну, к примеру, так:
Код

$(window).bind("load", function() {
    // your code
});

Так мой код вообще не вызывается  smile 
PM MAIL   Вверх
Amphiluke
Дата 27.2.2012, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



То есть событие "load" окна не возникает?  smile  
Только что открыл GMail, проверил в консоли. Все нормально срабатывает.
Код

window.addEventListener("load", function() { console.log("!!!!!!!!!!!!"); }, false);

PM   Вверх
4epT
Дата 27.2.2012, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: нет
Всего: 3



Вставил Ваш пример) Да, событие произошло ... frames там тоже undefined =(

Попробовал в интервале ждать пока он будет готов, тоже никаких результатов. 
PM MAIL   Вверх
Amphiluke
Дата 27.2.2012, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



А вы можете проверить на отдельном чистом user script`е, выкинув весь посторонний код? Просто прям вот такой скрипт из одной строчки:
Код

window.addEventListener("load", function() { console.log(typeof top.frames); }, false);

Я хз, у меня всё нормально пишет: «object», frames.length = 4. Правда, всё это при написании обработчика через консоль, но по большому счету, какая разница, наверное..
PM   Вверх
4epT
Дата 27.2.2012, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: нет
Всего: 3



Выводит object, но мне почему то кажется что это не показатель ) так как в моем скрипте frames.length выводит 5

Внесу немного ясности в данный вопрос. У меня через интервал, проверяется измнение урла, как только в урле я вижу что пользователь зашел в письмо, я запускаю свою функцию .. и уже там frames undefined. Может как то можно задержать выполнение функции ? До того момента как будет доступен frames.
PM MAIL   Вверх
Amphiluke
Дата 27.2.2012, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Цитата(4epT @  27.2.2012,  23:36 Найти цитируемый пост)
Может как то можно задержать выполнение функции ? До того момента как будет доступен frames.

А вы проверяли, что он в конце концов таки станет доступен? Именно из userscript?
Код

setTimeout(function() { alert(frames); }, 15000); // к примеру, так


Вообще говоря, если обработчик события 'load" у вас добавлен, все фреймы должны быть уже доступны к моменту его срабатывания. Но можно попытаться организовать опрос с интервалом
Код

setTimeout(function() {
    if (frames) {
        /* your code */
    } else {
        setTimeout(arguments.callee, 500);
    }
}, 500);


Добавлено через 2 минуты и 18 секунд
Правильнее так:
Код

var iid = setInterval(function() {
    if (frames) {
        clearInterval(iid);
        /* your code */
    }
}, 500);

PM   Вверх
4epT
Дата 27.2.2012, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: нет
Всего: 3



Цитата

setTimeout(function() { alert(frames); }, 15000);


Выводит DOMWindow object, то есть все хорошо.

Цитата

Код

var iid = setInterval(function() {
    if (frames) {
        clearInterval(iid);
        /* your code */
    }
}, 500);



Не помогло  smile 


PM MAIL   Вверх
Amphiluke
Дата 27.2.2012, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Цитата(4epT @  28.2.2012,  00:01 Найти цитируемый пост)
Не помогло

Что-то не верю.  smile
Единственное, чем отличается вариант с опросом через каждые полсекунды от варианта с 15-тисекундной задержкой, — это то, что в первом варианте о доступности frames станет известно раньше. 
PM   Вверх
4epT
Дата 29.2.2012, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: нет
Всего: 3



В общем проблема была в самом хроме .... это его примочки с безопасностью =) он блокирует доступ к frames. Данную "фичу" обойти можно только написаем непосредственно плагина под хром, и самое решение проблемы далеко не самое легкое, поэтому решил пока что на хром забить ..
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1027 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.