>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Послать событие MouseEvent http://forum.mozilla-russia.org/viewtopic.php?id=19241 |
*lix > 27-09-2007 18:08:53 |
Пытаюсь послать событие из под 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, но как тогда получить объект окна загруженной страницы? |
Shutnik > 27-09-2007 18:46:08 |
*lix |
*lix > 27-09-2007 18:56:20 |
Насколько я знаю, этот метод есть только под IE. Дело осложняется тем, что нужно кликнуть не на ссылку а на элемент <span>. На странице это нажатие должна обработать некая функция Jo(event, target). Я ведь могу передать в нее найденный элемент и созданное событие, вот только как ее вызвать? Просто Jo окончилось неудалчей... |
Shutnik > 27-09-2007 19:18:56 |
*lix Выделить код Код:<html> <body> <span id="span" onclick="alert('bar')">foo</span> <input type="button" value="go" onclick="document.getElementById('span').onclick()"> </body> </html> |
*lix > 27-09-2007 19:30:24 |
ты проверял код в chrome или только в коде страницы? если только в коде страницы, то там и приведенный мной выше код с dispatchEvent работает... А тут выдает на onclick():
getFolderLinks - это та функция в которой этот код размещен |
Shutnik > 27-09-2007 19:50:22 |
*lix |
*lix > 27-09-2007 19:54:37 |
только onclick() |
Shutnik > 27-09-2007 20:07:28 |
*lix Выделить код Код:Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser").getBrowser().selectedBrowser.contentWindow.document.getElementsByName("B")[0].click(); , выполенный в консоли ошибок, добавляет в поле ввода на данной странице код Добавлено Thu Sep 27 20:08:59 2007 : |
*lix > 28-09-2007 09:12:25 |
На написанное в консоле (неважно 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>. Ну а все же, может есть способ вызвать js-функцию определенную на самой странице? |
Anton > 28-09-2007 15:29:07 |
*lix пишет
Проверил на тестовой страничке: Перед этим проверил свой код: http://pastebin.mozilla-russia.org/90151 на странице google - тоже работает. |
*lix > 28-09-2007 15:57:43 |
ХХА! Я тупил. Пытался в 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 и все заработало. Всем большое спасибо за желание помочь. |