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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Greasemonkey и вызов функции со страницы 
V
    Опции темы
Elerond
Дата 13.8.2011, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Есть сторонний сайт. В коде страницы функция wm.makeRequest({params: {blocks: ['street_market_body'], wblocks_params: $H({street_market_body: $H({booth_id: '8', room: 'buy_room'})})}}) повешенная на onclick.
Использую Greasemonkey. Как можно вызвать эту функцию, прямой вызов не работает, консоль говорит что такой функции нет. С самой консоли она конечно же вызывается. Подгружать файл js с этой функций смысла нет, очень много зависимостей. 
--------------------
Мой блог
PM MAIL WWW   Вверх
Amphiluke
Дата 13.8.2011, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


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

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



А можете собрать минимальный пример, который иллюстрировал бы проблему?
Возможно, вы вызываете функцию слишком рано? Попробуйте вызвать ее в обработчике события load объекта window.
PM   Вверх
Elerond
Дата 13.8.2011, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Amphiluke, не рано это точно. 
После загрузки страницы, создается кнопка, при нажатии на которую обрабатывается функция , которая в свою очередь должна запустить проблемную.
--------------------
Мой блог
PM MAIL WWW   Вверх
Amphiluke
Дата 13.8.2011, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


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

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



Так. Еще раз. На чужом сайте есть кнопка вида примерно следующего, как я понял:
Код

<input type="button" onclick="wm.makeRequest({params: {blocks: ['street_market_body'], wblocks_params: $H({street_market_body: $H({booth_id: '8', room: 'buy_room'})})}});" />

Правильно?
А что будет, если вы вызовете клик на этой кнопке программно, с помощью метода click()?
PM   Вверх
Elerond
Дата 13.8.2011, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код
Код

<a onclick="wm.makeRequest({params: {blocks: ['street_market_body'], wblocks_params: $H({street_market_body: $H({booth_id: '8', room: 'buy_room'})})}})" href="javascript: undefined">Текст</a>

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

--------------------
Мой блог
PM MAIL WWW   Вверх
Amphiluke
Дата 13.8.2011, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


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

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



Насколько я помню, скрипты Greasemonkey выполняются в обособленной от основной страницы области видимости, так что прямое взаимодействие с функциями, определенными в документе, вполне может быть затруднено.
Есть еще один (нерекомендованый, в общем-то) способ обхода этого — использование объекта unsafeWindow. Попробуйте вызвать метод через него
Код

unsafeWindow.wm.makeRequest(...


Это сообщение отредактировал(а) Amphiluke - 13.8.2011, 19:42
PM   Вверх
Elerond
Дата 13.8.2011, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Попробовал. Консоль выдала ошибку:
Код

Ошибка: $H is not defined
Источник: jar:file:///C:/Users/vasilev/AppData/Roaming/Mozilla/Firefox/Profiles/apz9ciu0.default/extensions/%7Be4a8a97b-f2ed-450b-b12d-ee082ba24781%7D.xpi!/components/greasemonkey.js
Строка: 145

если смотреть куда он ссылается то это строка 145
Код

      for (var i=0; i<fbContext.activeConsoleHandlers.length; i++) {

из 
Код

    function findActiveContext() {
      for (var i=0; i<fbContext.activeConsoleHandlers.length; i++) {
        if (fbContext.activeConsoleHandlers[i].window == unsafeContentWin) {
          return fbContext.activeConsoleHandlers[i];
        }
      }
      return null;
    }


Похоже надо искать совсем другой подход в решении этого вопроса
--------------------
Мой блог
PM MAIL WWW   Вверх
Amphiluke
Дата 13.8.2011, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


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

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



Ну, блин.
Видимо, к $H (как и к другим глобальным свойствам window) тоже надо обращаться через unsafeWindow.
Код

... unsafeWindow.$H ...

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


Бывалый
*


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

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



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

Это сообщение отредактировал(а) Elerond - 13.8.2011, 20:11
--------------------
Мой блог
PM MAIL WWW   Вверх
Amphiluke
Дата 13.8.2011, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


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

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



Цитата(Elerond @  13.8.2011,  23:58 Найти цитируемый пост)
Похоже надо искать совсем другой подход в решении этого вопроса

Вообще, да. Как уже сказал, unsafeWindow не рекомендовано к использованию, ибо «открывает некоторые дыры безопасности» в скрипте, как выразились в документации.
Программная генерация клика — вполне так ничего решение, ИМХО. По крайней мере, безопаснее.

Добавлено через 1 минуту и 35 секунд
Цитата(Elerond @  14.8.2011,  00:11 Найти цитируемый пост)
Amphiluke, так у меня нету его, это функция похоже со страницы сайта, вообще непонятно когда и где она вызывается.

Ну понятно, что со страницы сайта. Так ведь и объект wm и его метод makeRequest тоже со страницы сайта. Не?
PM   Вверх
Elerond
Дата 13.8.2011, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Amphiluke, makeRequest со страницы, а $H уже зарыта где то в подключаемых многочисленных скриптах на этой странице. Искать не стал ее там. Попробую сделать регенерацию клика. В Greasemonkey оно вроде тоже не просто так работает. 
--------------------
Мой блог
PM MAIL WWW   Вверх
Amphiluke
Дата 13.8.2011, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


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

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



Почему? Должно все нормально быть.
Вот они сами примеры приводят для этого: Generate Click Events. smile

Это сообщение отредактировал(а) Amphiluke - 13.8.2011, 20:24
PM   Вверх
Elerond
Дата 13.8.2011, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Amphiluke, Огромное спасибо. Работает. 
--------------------
Мой блог
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




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


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

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