Пытаюсь послать событие из под 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
если вам нужно эмулировать нажатие onclick на конкретном элементе, то можно поступить проще

Выделить код

Код:

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

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

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

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

*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();

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

*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() можно отбосить ;)

На написанное в консоле (неважно 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 пишет

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

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

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

ХХА! Я тупил. Пытался в 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 и все заработало.

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