Полезная информация

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№127-09-2007 18:08:53

*lix
Участник
 
Группа: Members
Зарегистрирован: 02-09-2007
Сообщений: 18
UA: Firefox 2.0

Послать событие MouseEvent

Пытаюсь послать событие из под chrome (перекрывает browser, navaigator), так:

Выделить код

Код:

var win = window._content.document;		
  var spamLink = win.getElementById('_test_%40B%40Bulk');
  var mouseEvent = win.createEvent("MouseEvent"); 
  mouseEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
  spamLink.dispatchEvent(mouseEvent);

Но оно не посылается, делал addEventListener для spamLink и оно не сработало. Как выполнить щелчок по ссылке?
(не переход на другую страницу, а именно щелчок!)

PS: возможно проблема в 4м аргументе initMouseEvent, но как тогда получить объект окна загруженной страницы?

Отредактировано *lix (27-09-2007 18:25:37)

Отсутствует

 

№227-09-2007 18:46:08

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785

Re: Послать событие MouseEvent

*lix
если вам нужно эмулировать нажатие onclick на конкретном элементе, то можно поступить проще

Выделить код

Код:

window._content.document.getElementById('_test_%40B%40Bulk').click();

Отсутствует

 

№327-09-2007 18:56:20

*lix
Участник
 
Группа: Members
Зарегистрирован: 02-09-2007
Сообщений: 18
UA: Firefox 2.0

Re: Послать событие MouseEvent

Ошибка: spamLink.click is not a function

Насколько я знаю, этот метод есть только под IE. Дело осложняется тем, что нужно кликнуть не на ссылку а на элемент <span>.

На странице это нажатие должна обработать некая функция Jo(event, target). Я ведь могу передать в нее найденный элемент и созданное событие, вот только как ее вызвать? Просто Jo окончилось неудалчей...

Отредактировано *lix (27-09-2007 19:02:22)

Отсутствует

 

№427-09-2007 19:18:56

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785

Re: Послать событие MouseEvent

*lix
на самом деле, не click, а onclick ;)

Выделить код

Код:

<html>
  <body>
    <span id="span" onclick="alert('bar')">foo</span>
    <input type="button" value="go" onclick="document.getElementById('span').onclick()">
  </body>
</html>

Отсутствует

 

№527-09-2007 19:30:24

*lix
Участник
 
Группа: Members
Зарегистрирован: 02-09-2007
Сообщений: 18
UA: Firefox 2.0

Re: Послать событие MouseEvent

ты проверял код в chrome или только в коде страницы? если только в коде страницы, то там и приведенный мной выше код с dispatchEvent работает... А тут выдает на onclick():

Ошибка: [Exception... "Component is not available"  nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"  location: "JS frame :: chrome://mhookforms/content/actions.js :: getFolderLinks :: line 127"  data: no]

getFolderLinks - это та функция в которой этот код размещен

Отсутствует

 

№627-09-2007 19:50:22

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785

Re: Послать событие MouseEvent

*lix
проверял я не из chrome.
ты же пытаешься вызвать код на конкретной странице (табе браузера)?
обратись правильно к её document и вызови getElementById('_test_%40B%40Bulk').click();

Отсутствует

 

№727-09-2007 19:54:37

*lix
Участник
 
Группа: Members
Зарегистрирован: 02-09-2007
Сообщений: 18
UA: Firefox 2.0

Re: Послать событие MouseEvent

только onclick() :D
хорошо, как правильно обратиться к ее document? getBrowser().contentDocument ? не работает...

Отсутствует

 

№827-09-2007 20:07:28

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785

Re: Послать событие MouseEvent

*lix
у меня код

Выделить код

Код:

Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser").getBrowser().selectedBrowser.contentWindow.document.getElementsByName("B")[0].click();

, выполенный в консоли ошибок, добавляет в поле ввода на данной странице код

:P

Добавлено Thu Sep 27 20:08:59 2007 :
но поскольку вы работаете из browser.xul, часть кода до getBrowser() можно отбосить ;)

Отредактировано shutnik (27-09-2007 20:08:11)

Отсутствует

 

№928-09-2007 09:12:25

*lix
Участник
 
Группа: Members
Зарегистрирован: 02-09-2007
Сообщений: 18
UA: Firefox 2.0

Re: Послать событие MouseEvent

На написанное в консоле (неважно click() или onclick()):

Выделить код

Код:

Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser").getBrowser().selectedBrowser.contentWindow.document.getElementById('_test_Sent').onclick()

Выдается:

Выделить код

Код:

Ошибка:
Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser").getBrowser().selectedBrowser.contentWindow.document.getElementById("_test_Sent").onclick
is not a function

Еще раз упоминаю о том, что элемент - не кнопка или ссылка, а тег <span>.
Кстати, что интересно, искать элемент с id = "_test_%40B%40Bulk" этот код вообще отказывается, выдавая null, хотя в расширении он его успешно находит.

Ну а все же, может есть способ вызвать js-функцию определенную на самой странице?

Отредактировано *lix (28-09-2007 09:35:31)

Отсутствует

 

№1028-09-2007 15:29:07

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Послать событие MouseEvent

*lix пишет

Пытаюсь послать событие из под chrome (перекрывает browser, navaigator), так:
...
Но оно не посылается, делал addEventListener для spamLink и оно не сработало...

Проверил на тестовой страничке: http://pastebin.mozilla-russia.org/90149http://pastebin.mozilla-russia.org/90152 - работает.

Перед этим проверил свой код: http://pastebin.mozilla-russia.org/90151 на странице google - тоже работает.

Отредактировано Anton (28-09-2007 15:53:46)


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№1128-09-2007 15:57:43

*lix
Участник
 
Группа: Members
Зарегистрирован: 02-09-2007
Сообщений: 18
UA: Firefox 2.0

Re: Послать событие MouseEvent

ХХА! Я тупил. Пытался в yahoo.com почте выбрать папку Spam. Код для каждой папки там такой:

Выделить код

Код:

<tr style="display: table-row;" onmouseup="Jo(event,this);" onmouseover="w2(event,this);" class="folderRow axsTreeitem axsSelectable" title="Spam contains 0 messages">
<td class="folderCell" style="display: table-cell;" nowrap="nowrap">
  <div style="position: relative;">
    ...
    <span class="folderNameElem" id="_test_%40B%40Bulk" style="left: 36px;">Spam</span>
    ...
  </div>
</td>
</tr>

И я слал click полагая, что он будет расценен как последовательность событий mousedown, mouseup, click (как это бывает в системном программировании), однако сейчас послал конкретно mouseup и все заработало.

Всем большое спасибо за желание помочь.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]