Страницы: 1
Пытаюсь послать событие из под 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)
Отсутствует
*lix
если вам нужно эмулировать нажатие onclick на конкретном элементе, то можно поступить проще
Отсутствует
Ошибка: spamLink.click is not a function
Насколько я знаю, этот метод есть только под IE. Дело осложняется тем, что нужно кликнуть не на ссылку а на элемент <span>.
На странице это нажатие должна обработать некая функция Jo(event, target). Я ведь могу передать в нее найденный элемент и созданное событие, вот только как ее вызвать? Просто Jo окончилось неудалчей...
Отредактировано *lix (27-09-2007 19:02:22)
Отсутствует
*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>
Отсутствует
ты проверял код в 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 - это та функция в которой этот код размещен
Отсутствует
*lix
проверял я не из chrome.
ты же пытаешься вызвать код на конкретной странице (табе браузера)?
обратись правильно к её document и вызови getElementById('_test_%40B%40Bulk').click();
Отсутствует
*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 :
но поскольку вы работаете из browser.xul, часть кода до getBrowser() можно отбосить
Отредактировано shutnik (27-09-2007 20:08:11)
Отсутствует
На написанное в консоле (неважно 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)
Отсутствует
Пытаюсь послать событие из под 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ентов на части порвет !!!
Отсутствует
ХХА! Я тупил. Пытался в 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 и все заработало.
Всем большое спасибо за желание помочь.
Отсутствует
Страницы: 1